本文简要总结下SpringBoot配置类使用的注解@Configuration的属性proxyBeanMethods属性的作用
(2) 给IOC容器中导入组件有如下几种方式:
(2)首先,明确的一点是,使用了@Configuration注解的配置类的目的是给IOC容器中添加组件,在配置类中使用@Bean注解标注在方法上:
Configuration(proxyBeanMethods = true) //告诉SpringBoot这是一个配置类 == 配置文件
public class MyConfig {
@Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例
public User user01(){
User user = new User("zhangSan", 18);
//user组件依赖了Pet组件
user.setPet(tomcatPet());
return user;
}
@Bean("tom")
public Pet tomcatPet(){
return new Pet("tomcat");
}
}
(3)要研究的问题是:@Configuration注解的proxyBeanMethods属性取值true和false的区别:
- 【Full模式】当proxyBeanMethods=true时,外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象,也就是说,保证每个@Bean方法被调用多少次返回的组件都是单例的,所以如果proxyBeanMethods=true时,每次从外部调用@Bean方法时,都会进行判断操作,判断容器中是否有这个组件,会比较耗时,也即Full模式
-
【Lite模式】当proxyBeanMethods=false时,每个@Bean方法被调用多少次返回的组件都是新创建的,即,当从外部调用@Bean方法时,不会去判断容器中是否有这个组件,而是直接新创建一个组件然后返回,比Full模式效率高。
- 总结就是:如果配置类中的组件有依赖关系,则应该使用Full模式,即【proxyBeanMethods=true】,否则应该使用Lite模式,即【proxyBeanMethods=false】



