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. springboot集成支付宝的支付(通用版)

    [1.引依赖] <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sd ...

  2. 5.django-模型ORM

    Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库的操作,通过定义模型类来完成对数据库中表的操作 O:Object,也就是类对象的意思 R:Relation,关系数据库中表的意思 M: ...

  3. minio API demo

    package mainimport ( "context" "fmt" "github.com/minio/minio-go/v7" &q ...

  4. leetcode学习记录2.13

    [13] 罗马数字转整数 import java.util.HashMap; import java.util.Map; /* * * [13] 罗马数字转整数 * * https://leetcod ...

  5. .NET跨平台框架选择之一 - Avalonia UI

    本文阅读目录 1. Avalonia UI简介 Avalonia UI文档教程:https://docs.avaloniaui.net/docs/getting-started 随着跨平台越来越流行, ...

  6. C++期末考试题库

    哈尔滨商业大学计算机专业C++期末考试题库 下载:题库 示例: 一.单选题:1.能作为 C ++程序的基本单位是( C )A .字符 B .语句 C .函数 D .源程序文件2.程序中主函数的名字为( ...

  7. 火山引擎 DataLeap 的 Data Catalog 系统公有云实践

      Data Catalog 通过汇总技术和业务元数据,解决大数据生产者组织梳理数据.数据消费者找数和理解数的业务场景.本篇内容源自于火山引擎大数据研发治理套件 DataLeap 中的 Data Ca ...

  8. day17 MySQL的安装 & 数据库基本语法——增删改查

    day17 MySQL 登录数据库 mysql -h localhost -P 3307 -u root -p 查看所有数据库 show databases; 退出数据库 exit; //现有表格 u ...

  9. Django的manytomany字段

    manytomany字段 用于表示多对多的关系,最常见的就是老师和班级的例子 一个老师可以教多个班级,一个班级也可以有多个老师 add 添加关系 teachers=models.Teacher.obj ...

  10. 【JVM调优】Day02:CMS的三色标记算法、分区的G1回收器、短时停顿的ZGC回收器

    一.CMS及其三色标记算法 1.核心 标记整个图谱的过程分为多步 多个线程相互工作,才能标记完 标记的算法,JVM虚拟机.go语言使用的都是三色标记算法 2.含义 从那个地方开始,用三种颜色替代 一开 ...