Spring配置类理解(Lite模式和Full模式)
Spring中的注解大家在开发中都常常用到,但是如果我说我们常常用的注解修饰了一个类,表示这个类就是一个配置类很多开发者都会有点迷糊了。具体配置类在开发中有什么样的用途我就不多说了,相信很多人都知道,如果不知道可以私信我,我可以给你说一些关于它的简单点的知识,当然后期也可能会讲一些配置类的高级点的知识。下面我们就说一下那些注解修饰的类可以称之为配置类。
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。
欢迎扫码关注公众号,会努力分享更多精彩内容。
最新文章
- WPF实现图片倒影
- dubbo-admin重新编译后部署出现 valid LOC header (bad signature)异常
- 初学Flask(1)
- linux shell 流程控制
- 几本不错的开源书(to be continued)
- Python学习笔记——基础篇【第五周】——random &; time &; datetime模块
- B/S和C/S【转载Jane的博客 http://blog.sina.com.cn/liaojane】
- Yum database disk image is malformed
- Lucene.Net3.0.3+盘古分词器学习使用
- vulnhub writeup - 持续更新
- Envoy 源码分析--network L4 filter manager
- 《python for data analysis》第八章,绘图与可视化
- dremio jdbc使用
- 001-快速搭建Spring web应用【springboot 2.0.4】-gradle、springboot的启动过程分析、gradle多模块构建
- hibernate的一对多和多对一关联
- VS2015 调试中断点突然失效的解决办法、VS调试时关闭调试让浏览器继续保留页面
- MySQL--修改MySQL账号密码
- C#获取并修改文件扩展名的方法
- 【.net】Dictionary<;TKey, TValue>;源码分析
- NOIP2017 宝藏 题解报告【状压dp】
热门文章
- 洛谷P4168 蒲公英 分块处理区间众数模板
- tomcat报Address localhost:1099 is already in use
- 17、输入一行以空格分隔的英文,判断其共有多少单词,不能包含冠词a
- layui的图片上传使用
- 第2-4-3章 规则引擎Drools基础语法-业务规则管理系统-组件化-中台
- 【每日一题】【初始节点初始化,前一个为空】2022年1月7日-NC78 反转链表
- 【大数据面试】sqoop:空值、数据一致性、列式存储导出、数据量、数据倾斜
- 【JUC】循环屏障CyclicBarrier详解
- bug处理记录:com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped using backslash to be included in string value at [Source:
- 跨机房ES同步实战