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.rhkb.cn/news/393738.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(C23/C++23) 语句末尾的标签

文章目录 🔖前言🏷️ref🏷️标号 🔖兼容🏷️23标准前🏷️23标准后🏷️原因 🔖未兼容🔖END🌟关注我 🔖前言 🏷️ref C23提案复合语句末…

Serverless 1

一、云原生应用 云原生应用覆盖到: 大数据,人工智能,边缘计算,区块链等 服务代理:envoy API 网关:APISIX 服务网格:Istio 服务发现:CoreDNS 消息和流式处理:kafka Serve…

PDF预览:利用vue3-pdf-app实现前端PDF在线展示

目录 PDF预览:利用vue3-pdf-app实现前端PDF在线展示 一、vue3-pdf-app组件介绍及其优点 1、vue3-pdf-app是什么 2、作用与场景 3、类似的插件 二、项目初始化与依赖安装 1、初始化Vue3项目 2、安装依赖 三、集成vue3-pdf-app插件 1、引入插件 2、配置组件…

ChemLLM化学大模型再升级,AI助力化学研究

ChemLLM 介绍 ChemLLM 系列模型 是由上海人工智能实验室基于InternLM2 开发的首个兼备化学专业能力和对话、推理等通用能力的开源大模型。相比于现有的其他大模型,ChemLLM 对化学空间进行了有效建模,在分子、反应和其他领域相关的化学任务上表现优异。 …

解决戴尔台式电脑休眠后无法唤醒问题

近期发现有少量戴尔的台式机会有休眠后无法唤醒的问题,具体现象就是电脑在休眠后,电源指示灯以呼吸的频率闪烁,无论怎么点鼠标和键盘都没有反应,并且按开机按钮也没法唤醒,只能是长按开机键强制关机再重启才行&#xf…

leetcode 958.二叉树的完全性检验

1.题目要求: 给你一棵二叉树的根节点 root ,请你判断这棵树是否是一棵 完全二叉树 。在一棵 完全二叉树 中,除了最后一层外,所有层都被完全填满,并且最后一层中的所有节点都尽可能靠左。最后一层(第 h 层)…

YOLOv8改进 | 主干网络 | 将backbone替换为MobileNetV4【小白必备教程+附完整代码】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 专栏目录 :《YOLOv8改进有效…

Linux PCI和PCIe总线

1 PCIe中断 - PCI/PCIe设备中断都是level触发,并且请求信号为低电平有效 - PCI总线一般只有INTA#到INTD#的4个中断引脚,所以PCI多功能设备的func一般不会超过4个,但是共享中断除外 2 IOMMU 2.1 ARM SMMU v2 Refer to my blog ARM SMMU v2. 2.…

【机器学习】重塑游戏世界:机器学习如何赋能游戏创新与体验升级

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀目录 🔍1. 引言:游戏世界的变革前夜📒2. 机器学习驱动的游戏创新🌞智能化游戏设计与开发&…

OJ-0807

题目 参考 import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);String input in.nextLine();String[] numStrs inp…

身体出现这5种异常,可能是甲状腺在求救,千万别扛着!

甲状腺,被誉为人体新陈代谢的“发动机”,是调节我们身体能量和代谢的重要器官。然而,当甲状腺出现问题时,它往往会通过身体的一些异常信号向我们求救。北京精诚博爱医院张维一主任提醒:以下是五种常见的甲状腺异常表现…

您知道Jmeter中Redirect Automatically 和 Follow Redirects的使用场景吗?

相信很多使用过jmeter的同学都没有关注过请求中的Redirect Automatically 和 Follow Redirects选项,如下图: 在 JMeter 中,Redirect Automatically 和 Follow Redirects 是与 HTTP 请求重定向相关的两个选项,它们之间是有很大区别…

速度规划之:起点速度和终点速度不为零的非对称梯形速度规划

起点速度和终点速度不为零的非对称梯形速度规划 一、引言二、理论基础1. 梯形速度规划概述2.数学建模- 变量定义- 约束关系- 公式推导 三、计算过程1.只存在减速段2.只存在加速段3.存在加速段和减速段4.存在加速度段、匀速段和减速段 四、仿真实现五、优缺点优点缺点 六、总结 …

亚马逊等跨境电商平台怎么找到好的测评资源?

如何找到好的测评资源呢? 目前常规卖家找测评资源主要通过以下途径: 联系自己在海外的亲友帮忙测评,不过海外的亲友会比较有限安排业务员在facebook等社交平台找老外测评,但社交平台找老外很难掌控留评时效,甚至会遇…

破解USB设备通讯协议实现自定义软件控制的步骤与方法

在设备和计算机之间通过USB进行通讯的情况下,厂家提供的软件可以控制设备,但没有提供任何其他资料和支持,这种情况下,若希望自行开发软件来实现同样的功能,可以通过以下步骤破解通讯协议并开发自定义程序。 1. 捕获US…

2-57 基于matlab 实现了气缸的充气和放气的仿真

基于matlab 实现了气缸的充气和放气的仿真,在等温情况和绝热两种情况下分别进行了仿真,并给多变过程下的理论计算公式。程序已调通,可直接运行。 2-57 matlab 气缸充气和放气仿真 - 小红书 (xiaohongshu.com)

【论文阅读】PETRv2: A Unified Framework for 3D Perception from Multi-Camera Images

Q: 论文如何解决这个问题? A: 论文通过提出PETRv2框架来解决多相机图像的3D感知问题,具体方法包括以下几个关键点: 时间建模(Temporal Modeling): 通过3D坐标对齐(3D Coordinates Alignment&…

ASP.Net Core设置接口根路径的方法

使用asp.net core开发微服务项目,需要给每个服务设置不同的根路径,这样既能使用网关转发请求,又方便对单个服务进行测试,保证请求路径的统一。 设置方法需要使用中间件,在Program.cs添加如下代码 app.UsePathBase(&qu…

通过ZRender画一个大屏的顶部样式标题

介绍:通过ZRender画一个大屏项目的顶部样式,在其中放入大屏的标题。ZRender 是二维绘图引擎,它提供 Canvas、SVG、VML 等多种渲染方式。ZRender 也是 ECharts 的渲染器。 一、下载 npm install zrender终端输入以上命令下载包即可。 二、导…

记忆化搜索——1

目录 1.斐波那契数 2.不同路径 3.最长递增子序列 4.猜数字大小2 5.矩阵中的最长递增路径 1.斐波那契数 该题规律很明显,就直接放记忆化搜索的版本了 class Solution { public:int dfs(int n){if(n0||n1)//递归出口{return n;}if(f[n-1]-1)//检查是否已经记忆过…