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。

欢迎扫码关注公众号,会努力分享更多精彩内容。

Spring配置类理解(Lite模式和Full模式)的更多相关文章

  1. 521我发誓读完本文,再也不会担心Spring配置类问题了

    当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...

  2. Spring配置类深度剖析-总结篇(手绘流程图,可白嫖)

    生命太短暂,不要去做一些根本没有人想要的东西.本文已被 https://www.yourbatman.cn 收录,里面一并有Spring技术栈.MyBatis.JVM.中间件等小而美的专栏供以免费学习 ...

  3. 使用spring配置类代替xml配置文件注册bean类

    spring配置类,即在类上加@Configuration注解,使用这种配置类来注册bean,效果与xml文件是完全一样的,只是创建springIOC容器的方式不同: //通过xml文件创建sprin ...

  4. 真懂Spring的@Configuration配置类?你可能自我感觉太良好

    当大潮退去,才知道谁在裸泳.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.MyBatis.中 ...

  5. 使用配置类而不使用XML文件(代替bean.xml)对spring进行配置

    以下类是一个配置类,它的作用和bean.xml是一样的注解: @Configuration 作用: 用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解. 获取容器时需要使用Anno ...

  6. 【Spring】简述@Configuration配置类注册BeanDefinition到Spring容器的过程

    概述 本文以SpringBoot应用为基础,尝试分析基于注解@Configuration的配置类是如何向Spring容器注册BeanDefinition的过程 其中主要分析了 Configuratio ...

  7. 配置类需要标注@Configuration却不知原因?那这次就不能给你涨薪喽

    专注Java领域分享.成长,拒绝浅尝辄止.关注公众号[BAT的乌托邦]开启专栏式学习,拒绝浅尝辄止.本文 https://www.yourbatman.cn 已收录,里面一并有Spring技术栈.My ...

  8. spring5 源码深度解析----- 被面试官给虐懵了,竟然是因为我不懂@Configuration配置类及@Bean的原理

    @Configuration注解提供了全新的bean创建方式.最初spring通过xml配置文件初始化bean并完成依赖注入工作.从spring3.0开始,在spring framework模块中提供 ...

  9. 脱离xml使用JavaConfig实现Spring配置

    总结 情况一: 配置类中类名添加 @Configuration 注解,同时提供一个方法返回一个Bean实例,且这个方法添加注解 @Bean ,就可以由Spring管理此对象 如下所示: User.ja ...

  10. 简单工厂模式和策略模式结合使用php

    策略模式是有客户端自行实例化算法类的,而简单工厂模客户端只传参数,不关心对象的生成. 结合两种模式,可以在使用策略模式的时候客户端不再生成算法的对象.修改策略模式的配置类即可. 在之前策略模式基础上, ...

随机推荐

  1. CSP-S2022 游寄

    前言:最后确实寄了,因为疫情,都没考成. \(8.26\) 占坑. \(8.23\) 参加浴谷月赛初赛模拟,报的 \(S\) 组,只有 \(71\) 分. \(8.25\) \(AK\) 了同学出的比 ...

  2. 【Spring系列】- Bean生命周期底层原理

    Bean生命周期底层原理 生命不息,写作不止 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 前言 上次学到动 ...

  3. 数据结构初阶--顺序表(讲解+C++类模板实现)

    顺序的概念与结构 顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构,一般情况下采用数组存储.在数组上完成数据的增删查改. 一般分为两种:静态顺序表和动态顺序表 静态顺序表 #define ...

  4. C温故补缺(十四):内存管理

    内存管理 stdlib库中有几个内存管理相关的函数 序号 函数和描述 1 void *calloc(int num, int size);在内存中动态地分配 num 个长度为size 个字节 的连续空 ...

  5. xml中出现< >&等特殊字符如何存储

    特殊字符用下面对应得符号代替. < <= > >= & ' " < <= > >= & &apos; "

  6. 如何解决arthas-failed-to-bind-telnet-or-http-port问题

    解决方法 一台机器启用多个微服务的时候可能出现 多个 arthas端口冲突.可以配置为随机端口,或者配置为 -1 12 #arthas.telnet-port=-1#arthas.http-port= ...

  7. 《HTTP权威指南》– 6.代理

    代理的概念: Web代理服务器是网络的中间实体.位于客户端和服务器之间,扮演"中间人"的角色,在各端点之间来回传送HTTP报文. 私有和共享代理: 代理服务器可以是某个客户端专用的 ...

  8. 伙伴福利,100个项目彻底精通Java!【开源】

    为了帮助更多的小伙伴,快速成长进步,冲进大厂中厂,我分享了很多的项目哟,例如: java项目精品实战案例 | JavaSwing实战项目 但很多小伙伴,还觉得不够,好吧!今天就拿出压箱底的项目,给支持 ...

  9. python解释器下载与基本使用

    python介绍与解释器下载基本使用 1.python发展方向 ​ web方向.自动化运维.自动化测试.自动化办公.网络爬虫.金融量化.人工智能.机器学习.数据分析 2.python解释器 ​ 历史 ...

  10. 模板层之标签 自定义过滤器及标签 模板的继承与导入 模型层之前期准备 ORM常用关键字

    目录 模板层之标签 if判断 for循环 自定义过滤器.标签及inclusion_tag(了解) 前期三步骤 自定义过滤器(最大只能接收两个参数) 自定义标签(参数没有限制) 自定义inclusion ...