首页 > 其他分享 >SpringBoot(容器功能)

SpringBoot(容器功能)

时间:2024-03-12 18:58:41浏览次数:21  
标签:容器 功能 springboot sun springframework bean import public SpringBoot

文章目录

1.@Configuration 添加/注入bean

1.注入bean
1.编写一个JavaBean,Monster.java
package com.sun.springboot.bean;

/**
 * @author 孙显圣
 * @version 1.0
 */
public class Monster {
    private Integer id;
    private String name;
    private Integer age;
    private String skill;

    public Monster() {

    }

    public Monster(Integer id, String name, Integer age, String skill) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.skill = skill;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public String getSkill() {
        return skill;
    }

    public void setSkill(String skill) {
        this.skill = skill;
    }

    @Override
    public String toString() {
        return "Monster{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                ", skill='" + skill + '\'' +
                '}';
    }
}

2.创建一个config文件夹(名字任意),用于存放配置Bean的类(相当于配置文件)

image-20240312154505906

3.BeanConfig.java
package com.sun.springboot.config1;

import com.sun.springboot.bean.Monster;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Configuration //这个注解类似于原来的配置文件
public class BeanConfig {
    /**
     * 类型:Monster
     * id:monster01, 如果想要指定id,只需设置@Bean的name属性
     * 单例bean注入容器:return new Monster()
     * @return
     */
    @Bean
//    @Scope("prototype") //默认是单例的如果希望是多例的,则加一个注解即可。
    public Monster monster01() {
        return new Monster(1, "牛魔王", 12, "牛牛冲撞");
    }
}

4.测试使用 MainApp.java
package com.sun.springboot;

import com.sun.springboot.bean.Monster;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示是一个springboot项目
@SpringBootApplication(scanBasePackages = {"com.sun"}) //扫描指定的包,参数是数组类型的
public class MainApp {
    public static void main(String[] args) {
        //启动springboot
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        //由于是单例所以可以通过类型来获取
        Monster bean = ioc.getBean(Monster.class);
        System.out.println(bean);
    }
}

2.结果展示

image-20240312155648547

2.细节说明
1.@Configuration的proxyBeanMethods属性

image-20240312161624699

2.可以有多个配置类但是注入bean的id不能相同
1.新建一个BeanConfig01.java作为第二个配置类,故意和第一个配置类注入的bean的id相同
package com.sun.springboot.config1;

import com.sun.springboot.bean.Monster;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 孙显圣
 * @version 1.0
 */

//这是第二个bean配置文件
@Configuration
public class BeanConfig01 {
    @Bean
    public Monster monster01() {
        return new Monster(1, "牛魔王", 12, "牛牛冲撞");
    }
}

2.会报错

image-20240312163158508

3.修改一下这个bean的id

image-20240312163306024

4.MainApp.java获取这两个bean
package com.sun.springboot;

import com.sun.springboot.bean.Monster;
import com.sun.springboot.config1.BeanConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示是一个springboot项目
@SpringBootApplication(scanBasePackages = {"com.sun"}) //扫描指定的包,参数是数组类型的
public class MainApp {
    public static void main(String[] args) {
        //启动springboot
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        //获取第一个bean
        Monster bean1 = ioc.getBean("monster01", Monster.class);
        //获取第二个bean
        Monster bean2 = ioc.getBean("monster02", Monster.class);
        System.out.println(bean1);
        System.out.println(bean2);

    }
}

5.成功获取不同配置类注入的bean

image-20240312163634634

2.@Import 注入bean

1.新建两个空的bean,Dog和Cat

image-20240312164449942

2.配置类中使用注解注入单例bean,id为全类名

image-20240312164601651

3.MainApp.java 获取两个bean对象
package com.sun.springboot;

import com.sun.springboot.bean.Cat;
import com.sun.springboot.bean.Dog;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示是一个springboot项目
@SpringBootApplication(scanBasePackages = {"com.sun"}) //扫描指定的包,参数是数组类型的
public class MainApp {
    public static void main(String[] args) {
        //启动springboot
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);
        
        Cat cat = ioc.getBean(Cat.class);
        Dog dog = ioc.getBean(Dog.class);
        System.out.println(cat);
        System.out.println(dog);


    }
}

4.结果展示
1.成功得到两个bean对象

image-20240312164824082

2.id为全类名

image-20240312164235674

3.@Conditional 条件装配

1.基本介绍
1.介绍

image-20240312165406408

2.扩展注解功能

image-20240312165601514

2.应用实例1:@ConditionalOnBean
1.需求分析

image-20240312165643503

2.新建一个配置类 ConditionalConfig.java 用于测试条件装配
package com.sun.springboot.config1;

import com.sun.springboot.bean.Cat;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author 孙显圣
 * @version 1.0
 */
//测试条件装配

@Configuration
public class ConditionalConfig {
    //这里注入一个猫girl
    @Bean(name = "cat_girl")
    public Cat cat() {
        return new Cat();
    }

    @Bean
    @ConditionalOnBean(name = "cat_girl") //注入一个猫boy,条件是有一个猫girl
    public Cat cat_boy() {
        return new Cat();
    }
}

3.测试获取cat_boy
package com.sun.springboot;

import com.sun.springboot.bean.Cat;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示是一个springboot项目
@SpringBootApplication(scanBasePackages = {"com.sun"}) //扫描指定的包,参数是数组类型的
public class MainApp {
    public static void main(String[] args) {
        //启动springboot
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        //获取cat_boy
        Cat cat = ioc.getBean("cat_boy", Cat.class);
        System.out.println(cat);
        
    }
}

4.结果展示

image-20240312171954391

3.应用实例2:@ConditionalOnMissingBean
1.需求分析

注入一个猫boy,条件是没有一个猫girl

2.ConditionalConfig.java 添加方法
    @Bean
    @ConditionalOnMissingBean(name = "cat_girl") //注入一个猫boy,条件是没有一个猫girl
    public Cat cat_boy2() {
        return new Cat();
    }
3.测试获取cat_boy2
package com.sun.springboot;

import com.sun.springboot.bean.Cat;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示是一个springboot项目
@SpringBootApplication(scanBasePackages = {"com.sun"}) //扫描指定的包,参数是数组类型的
public class MainApp {
    public static void main(String[] args) {
        //启动springboot
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        //获取cat_boy2
        Cat cat_boy2 = ioc.getBean("cat_boy2", Cat.class);
        System.out.println(cat_boy2);

    }
}

4.结果展示

image-20240312172659292

4.条件装配注解可以放在类型上

image-20240312172847245

4.@ImportResource 原生配置文件引入

1.基本介绍

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.应用实例
1.需求分析

image-20240312173233260

2.新建一个 BeanConfig02.java 用于测试
package com.sun.springboot.config1;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ImportResource;

/**
 * @author 孙显圣
 * @version 1.0
 */
@Configuration
//通过类路径来读取beans.xml文件,引入bean到这个配置类,然后就可以通过SpringBoot的ioc来获取bean
//注意这个注解的属性可以是value也可以是locations,而value属性是可以不写属性名的
@ImportResource(locations = "classpath:beans.xml")
public class BeanConfig02 {

}

3.类路径下编写一个beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="com.sun.springboot.bean.Monster" id="monsterByImport">
    <property name="id" value="1"/>
    <property name="skill" value="1"/>
    <property name="name" value="1"/>
    <property name="age" value="1"/>
</bean>
</beans>
4.MainApp.java 使用SpringBoot的ioc来获取bean
package com.sun.springboot;

import com.sun.springboot.bean.Cat;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;

/**
 * @author 孙显圣
 * @version 1.0
 */
//表示是一个springboot项目
@SpringBootApplication(scanBasePackages = {"com.sun"}) //扫描指定的包,参数是数组类型的
public class MainApp {
    public static void main(String[] args) {
        //启动springboot
        ConfigurableApplicationContext ioc = SpringApplication.run(MainApp.class, args);

        //获取从beans.xml中导入到SpringBoot中的ioc容器中
        Object bean = ioc.getBean("monsterByImport");
        System.out.println(bean);
        
    }
}

5.成功获取

image-20240312174414367

标签:容器,功能,springboot,sun,springframework,bean,import,public,SpringBoot
From: https://blog.csdn.net/m0_64637029/article/details/136660197

相关文章

  • Claude3、GPT-4 、Gemini、Sora:五大模型的技术特点与功能
    【最新增加Claude3、Gemini、Sora、GPTs讲解及AI领域中的集中大模型的最新技术】2023年随着OpenAI开发者大会的召开,最重磅更新当属GPTs,多模态API,未来自定义专属的GPT。微软创始人比尔盖茨称ChatGPT的出现有着重大历史意义,不亚于互联网和个人电脑的问世。360创始人周鸿祎认......
  • 【Springboot】--如何将springboot+vue项目部署到云服务器?
    目录一、准备工作1、购买云服务器2、获取面板地址二、jdk和数据库1、安装环境 2、配置jdk环境变量3、java版本的问题4、添加数据库三、前端部署 1、vue2、创建站点​编辑四、后端部署1、application.yml2、idea打包3、运行jar包4、开放端口五、可能遇到的......
  • Leangoo领歌免费敏捷工具项目“版本发布”功能上线
    ​ Leangoo领歌是款永久免费的专业的敏捷开发管理工具,提供端到端敏捷研发管理解决方案,涵盖敏捷需求管理、任务协同、进展跟踪、统计度量等。Leangoo领歌上手快、实施成本低,可帮助企业快速落地敏捷,提质增效、缩短周期、加速创新。Leangoo领歌区别于传统项目管理软件,项目的需求、......
  • 如何在Docker容器和主机之间复制文件/文件夹
    简介Docker是一种流行的容器化平台,它允许开发人员在独立、可移植的环境中构建、打包和部署应用程序。在使用Docker时,常常需要在Docker容器和主机之间进行文件的复制和共享。Docker提供了一个名为dockercp的命令,可以轻松地在容器和主机之间复制文件和目录。本文将详细介绍docker......
  • Spring的核心思想之一IOC:仿Spring自定义一个实现IOC的容器
    IoCInversionofControl(控制反转/反转控制),是⼀个技术思想而不是⼀个技术实现。它描述的是Java开发领域对象的创建,管理的问题——传统开发⽅式:⽐如类A依赖于类B,往往会在类A中new⼀个B的对象,而在IoC思想下开发⽅式:使用者不⽤⾃⼰去new对象了,由IoC容器(Spring框架或其他)帮......
  • springboot-02理解 自动配置原理
    在进行springboot的多环境配置:可以选择激活那一共配置文件在properties下使用spring.profiles.active=.dev.test等在yaml下可以使用-------来进行分割环境配置测试环境server:port:8082spring:Profiles:dev/test;active:只需通过选择不同调用的环境参数进行声明即可......
  • update-initramfs的用途和功能
    update-initramfs 是在Linux系统中用于更新initramfs归档文件的一个命令。initramfs(初始内存文件系统)是一个临时的根文件系统,它在系统启动过程中加载到内存中。它包含了启动时直到可以挂载真正的根文件系统所必需的驱动程序和工具。这个机制允许内核在实际的根文件系统可用之......
  • 将Asp.net Core 微服务容器部署到 Kubernetes
    将微服务容器部署到KubernetesKubernetes会为你运行容器,需要通过YAML文件描述希望Kubernetes执行的操作,在Kubernetes上部署和运行后端服务简单操作如下步骤安装Kubernetes工具和实现我们需要同时安装kubectl工具和Kubernetes实现按照参考:https://www.cnblogs.co......
  • springboot-yaml语法
    SpringBoot使用一个全局的配置文件,配置文件名称是固定的application.properties语法结构:key=valueserver.port=8080application.yml语法结构:key:空格value普通的key-valueserver:port:8080yaml后缀配置可以存储对象,而properties只能保存键值对yaml不仅可以用来......
  • Ingress 注释常用功能总结
    ingress注释常用功能总结--annotations-prefix #特定于NGINX控制器的入口注释的前缀。(默认“nginx.ingress.kubernetes.io”)1、域名重定向这个配置会把www.kailinhr.com跳转到www.zhuoliehr.com。#主要配置nginx.ingress/permanent-redirect-code:"301"nginx.ingres......