@Configuration和@Bean 给容器中添加bean组件
@Configuration属于 SpringBoot的 组件添加功能的注解
1、基本使用
Full模式与Lite模式
- 配置 类组件之间无依赖关系用Lite模式加速容器启动过程,减少判断
- 配置类组件之间有依赖关系,方法会被调用得到之前单实例组件,用Full模式
2、思考:SpringBoot怎么给容器中添加Bean组件?
在之前Spring的时候,我们都是用 xxx.xml 给bean注入
那么现在是
(1)@Configuration 告诉SpringBoot 这是一个配置类 == 配置 文件beans.xml
(2)@Bean 给容器中添加组件 == …
3、示例:
package com.spring.boot01helloworld2.config;
import ch.qos.logback.core.db.DBHelper;
import com.spring.boot01helloworld2.bean.Pet;
import com.spring.boot01helloworld2.bean.User;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* 1、之前实在配置类中用 标签 添加,那么现在 我们可以用 方法 添加 bean
* 2、@Configuration 告诉SpringBoot这是一个配置类 == 配置 文件beans.xml
* 3、proxyBeanMethods:代理 bean的 方法
* 全模式:Full(proxyBeanMethods = true)
* 轻量级模式:Lite(proxyBeanMethods = false) 在外不会在调用代理对象,每一次调用都会产生新的代理对象
* 场景:解决组件依赖场景
* 4、注意这个在不同版本的SpringBoot下 设置成false可能会报错,但是不影响运行
* 5、@Import({User.class, DBHelper.class})
* 给容器中自动创建出这两个类型的组件
*/
@Import({User.class, DBHelper.class})
@Configuration(proxyBeanMethods = true)
public class Myconfig {
/**
* 1、注解@Bean 给容器中添加组件。
* 以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
* 2、外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象
*
* @return
*/
@Bean
public User user01(){
User zhangsan = new User("zhangsan",19);
//user组件依赖了Pet组件,true是成立的
zhangsan.setPet(tomcatPet());
return zhangsan;
}
/**
* 这里也可以 给自定义组件的名字 tom
* @return
*/
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
总结:
- @Configuration 代替了 之前Spring中 文件beans.xml
- @Bean 代替了 在 beans.xml 中注册的 …