Spring配置类理解(Lite模式和Full模式)
1:类上标注有@Component注解。PS 可以看Spring源码@Service,@Controller注解上都有此注解。
2:类上标注有@ComponentScan注解。
3:类上标注有@Import注解。
4:类上标注有@ImportResource注解。
5:若类上没有任何注解,但类内存在@Bean方法。
以上case的前提类上没有标注@Configuration注解,在Spring5.2之后新增加了一种case也算Lite模式标注有@Configuration(proxyBeanMethods=false) ,注意此值默认为true,需要显示改为false。上面列举的都可以称为配置类,属于Lite模式的配置类。
Lite模式优缺点:
优点:运行时不再需要给对应类生成CGLIB子类,提高了性能,降低了启动时间。 可以该配置类当作一个普通类使用,也就是@Bean方法可以是private,可以是final。
缺点:不能声明@Bean之间的依赖,也就是说不能通过调用方法依赖其他Bean。其实这个缺点还好,很容易用其他方法弥补,比如:把依赖Bean放进方法入参里即可。
Lite模式下,配置类本身不会被CGLB增强,放进IOC容器就是本尊。
Lite模式下,配置类内部不能通过方法调用来处理依赖,否则每次生成的都是一个新实例,而非IOC容器内的单例。
项目中标注为 @Configuration这个注解并且proxyBeanMethods=true的类称为full模式的配置类。
优点:可以支持通过常规java调用bean的方法并且保证是容器内的bean,有效的避免了Lite模式下操作时难以追踪的细微错误。
缺点:运行的时候给类生成一个CGLB子类放进容器,有一点的开销(这种开销在Springboot这种拥有大量配置类中不可忽视)。
正因为被代理,@Bean方法不可以时private ,不可以时final。
欢迎关注,会努力分享更多精彩内容。
相关文章
- 系统间数据对接传输
- iOS调试技巧——NSParameterAssert
- 怎么让jupyter自动在浏览器弹出?
- 《Motion Design for iOS》(二十三)
- linux如何安装pycharm?
- iOS10&Xcode8 推送证书问题
- 《Motion Design for iOS》(二十四)
- centos vim怎么查找文件内容
- iOS键盘、选取器上的工具栏
- centos vim配置文件在哪
- 《Motion Design for iOS》(二十五)
- iOS判断系统版本号的四种方法
- 《Motion Design for iOS》(二十六)
- 《Motion Design for iOS》(二十七)
- Xcode8禁止系统log&真机调试NSLog无输出
- 《Motion Design for iOS》(二十八)
- 《Motion Design for iOS》(二十九)
- 浅谈iOS @synchronized 锁用法
- pycharm怎么注释?
- iOS中OC给Category添加属性