@confirguration(proxyBeanMethods = false)的作用,如何选择Full模式和Lite模式,以方法名作为组件的i
分享于 点击 8367 次 点评:267
@confirguration(proxyBeanMethods = false)的作用,如何选择Full模式和Lite模式,以方法名作为组件的i
@Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类 == 配置文件 public class MyConfig { @Bean //给容器中添加组件。以方法名作为组件的id。返回类型就是组件类型。返回的值,就是组件在容器中的实例 public User user01(){ User zhangsan = new User("zhangsan", 18); //user组件依赖了Pet组件 zhangsan.setPet(tomcatPet()); return zhangsan; }
上述代码@Configuration(proxyBeanMethods = true)表示使用代理对象调用方法。SpringBoot总会检查这个组件是否在容器中有,如果有就直接拿,没有再创建。(单例模式)
public static void main(String[] args) { SpringApplication.run(MainApplication.class, args); User user = bean.user01(); User user1 = bean.user01(); System.out.println(user == user1); 返回为true }
如果@Configuration(proxyBeanMethods = false) 则会拿到两个不同的对象。
System.out.println(user == user1); 返回为false
两种开发模式
Full:全模式(proxyBeanMethods = true)
每一次外界调用组件,springboot都会检查容器中是否已经存在该组件,效率低
Lite:轻量级模式(proxyBeanMethods = false)
优点:springboot不会来检查方法返回的组件在容器中有没有,启动非常快
所以,建议以下两条:
配置类组件之间无依赖管子用Lite模式加速容器启动过程,减少判断
配置类组件之间有依赖关系,方法会被调用得到之前的单实例组件,用Full模式
用户点评