当前位置: 首页 > news >正文

Spring的配置类分为Full和Lite两种模式

Spring的配置类分为Full和Lite两种模式

首先查看 @Configuration 注解的源码, 如下所示:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Configuration {@AliasFor(annotation = Component.class)String value() default "";boolean proxyBeanMethods() default true;boolean enforceUniqueMethods() default true;
}

其中属性 proxyBeanMethods 用来表示加载配置类使用的动态代理方式; 一般默认值为 true; 表示会通过 Cglib 对配置类进行增强, 因为增强后配置类会显得比较"重", 所以此时称为 Full 模式; 如果设置为 false, 则配置类产生的 bean 为原始对象, 相对轻量, 所以此时叫 Lite 模式;

所以Full模式和Lite模式是用来说明当前@ConfigurationproxyBeanMethods属性是为false还是true, 即指加载配置类时, 配置类本身的 Bean 对象是否会被 Cglib增强;

即所谓 Full 模式 和 Lite 模式 是说配置类的 Full 模式或者 Lite 模式;

对比Lite模式和Full模式

Lite模式

  • 配置类本身不会被 CGLIB 增强, 放进Ioc容器内的是配置类本身;
  • 对于内部类没有限制, 可以是 Full 模式或 Lite 模式;
  • 配置类内部不能通过方法调用来处理依赖, 否则, 每次生成的都是一个新实例而非Ioc容器内的单例;

即按照如下所示, datasource() 方法不会被注入 Ioc 容器中的单例, 而是会 new 一个新的实例对象;
在这里插入图片描述

需要通过以下方式来配置类内部处理依赖:

在这里插入图片描述

  • 配置类是普通Java类, 内部的 @Bean 方法可以使用 private/final 等进行修饰;

Full模式

  • 配置类会被 CGLIB 增强(生成代理对象), 放进 Ioc 容器内的是代理对象;
  • 同样对内部类没有限制, 可以是 Full 模式会 Lite 模式;
  • 该模式下, 配置类内部可以通过方法调用来处理依赖, 并且能保证是同一个实例, 都指向 Ioc 容器中的单例;
  • 此时被增强的代理类是原始配置类的子类, 即原始配置类中 @Bean 方法不能被 private/final 修饰, 因为需要被子类继承并重写;

参考文章

  • Spring配置类为什么要分Full和Lite模式
    Lite模式](https://www.cnblogs.com/54chensongxia/p/17250683.html)
http://www.lryc.cn/news/413909.html

相关文章:

  • 探索Perl的代码生成艺术:利用编译器后端释放潜能
  • 21 B端产品经理之技术常识(1)
  • 数据结构基础详解(C语言):单链表_定义_初始化_插入_删除_查找_建立操作_纯c语言代码注释讲解
  • 【智能时代的创新工具】LangChain快速入门指南:轻松掌握语言模型的集成与运用
  • 文献阅读:细胞分辨率全脑图谱的交互式框架
  • YAML基础语言深度解析
  • xcode使用
  • OV2640引脚的定义(OV2640 FPC模组规格书(接口线序))
  • CTFSHOW 萌新 web10 解题思路和方法(passthru执行命令)
  • 深入Java数据库连接和JDBC
  • 灰狼优化算法(GWO)与长短期记忆网络(LSTM)结合的预测模型(GWO-LSTM)及其Python和MATLAB实现
  • 电路板热仿真覆铜率,功率,结温,热阻率信息计算获取方法总结
  • C#中多线程编程中的同步、异步、串行、并行及并发及死锁
  • 【Lampiao靶场渗透】
  • 使用WebSocket实现log日志流的实时展示-从轮询到通知
  • UE5 从零开始制作跟随的大鹅
  • O’Reilly
  • 优盘驱动器未格式化:数据拯救行动指南
  • 4.Handler mappings
  • 《学会 SpringMVC 系列 · 消息转换器 MessageConverters》
  • 深度学习项目 -7-使用 Python 的手写数字识别
  • MySQL —— 库,数据类型 与 表
  • Java重修笔记 第二十七天 匿名内部类
  • Nero Lens 智图 - 适用于 iOS 和 iPadOS 的专业图片处理 App
  • Nginx代理路径被吃
  • pytest-html报告修改与汉化
  • react-native从入门到实战系列教程一Swiper组件的使用及bug修复
  • springboot开发的常用注解总结-配置组件类注解
  • DataX 最新版本安装部署
  • 【架构】应用保护