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

news2024/9/24 16:22:15

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.coloradmin.cn/o/1975991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache解析漏洞~CVE-2017-15715漏洞分析

Apache解析漏洞 漏洞原理 # Apache HTTPD 支持一个文件拥有多个后缀,并为不同后缀执行不同的指令。比如如下配置文件: AddType text/html .html AddLanguage zh-CN .cn# 其给 .html 后缀增加了 media-type ,值为 text/html ;给 …

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想!我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等,Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载:ceomax-pro7.6.zip…

<数据集>航拍行人识别数据集<目标检测>

数据集格式:VOCYOLO格式 图片数量:7482张 标注数量(xml文件个数):7482 标注数量(txt文件个数):7482 标注类别数:1 标注类别名称:[people, pedestrian] 序号类别名称图片数框数1people5226385602pedes…

hcip作业1

写网关 r1 <Huawei>system-view [Huawei]sysname r1 [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip address 192.168.1.1 24 [r1]interface g 0/0/1 [r1-GigabitEthernet0/0/1]ip address 192.168.3.1 24 [r1]interface LoopBack 0 [r1-LoopBack0…

【算法/题目】:递归、搜索训练

✨ 吾与春风皆过客&#xff0c;君携春水揽星河 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;算法训练 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 …

117页PPT埃森哲-物流行业信息化整体规划方案

一、埃森哲-物流行业信息化整体规划方案 资料下载方式&#xff0c;请看每张图片右下角信息 埃森哲在物流行业信息化整体规划项目中的核心内容&#xff0c;旨在帮助物流企业通过信息技术的应用实现业务流程的优化、运营效率的提升以及市场竞争力的增强。以下是埃森哲在此类项目…

全面掌握 Kubernetes 对象的基本操作:从定义到实践

引言 Kubernetes 是当今最流行的容器编排平台之一&#xff0c;它通过自动化容器化应用的部署、扩展和管理&#xff0c;极大地提升了应用的可用性和可扩展性。在 Kubernetes 系统中&#xff0c;对象是其核心概念之一&#xff0c;是对系统状态的持久化描述。理解 Kubernetes 对象…

日志定向实验

目录 一.实验环境 二.实验一 1.node1主机进入rsyslog.conf文件添加规则 2.重启服务测试 三.实验二 1.node1主机进入rsyslog.conf文件添加规则 2.node1重启服务&#xff0c;清除日志历史记录 2.node2主机重新登录node1 3.node1没有日志记录 4.node1重启httpd 5.node1…

网络基础之(2)初级网络知识

网络基础之(2)初级网络工程师 Author&#xff1a;Once Day Date: 2024年7月29日 漫漫长路&#xff0c;有人对你笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day的博客-CSDN博客。 来自锐捷数通技术基础资料&#xff0c;百度云盘链接: 下载链接&#xff0c…

状体管理-装饰器

State 自己的状态 注意:不是状态变量的所有更改都会引起刷新。只有可以被框架观察到的修改才会引起UI刷新。 1、boolean、string、number类型时&#xff0c;可以观察到数值的变化。 2、class或者Object时&#xff0c;可以观察 自身的赋值 的变化&#xff0c;第一层属性赋值的变…

【控制研究领域EI会议推荐】第四届电气工程与控制科学国际学术会议(IC2ECS 2024)

【拟IEEE出版|连续3届稳定EI检索|团队投稿可享优惠】 第四届电气工程与控制科学国际学术会议&#xff08;IC2ECS 2024&#xff09; 2024 4th International Conference on Electrical Engineering and Control Science *拟IEEE 出版&#xff0c;连续3届稳定EI检索&#xff0…

了解三大无线通信技术(Wifi、蓝牙、NFC)

1.WIFI Wi-Fi&#xff08;Wireless Fidelity&#xff09;&#xff0c;又称作“移动热点”&#xff0c;是当今使用最广的一种无线网络传输技术。Wi-Fi技术是把有线网络信号转换成无线信号&#xff0c;形成无线局域网&#xff0c;将局域网内的设备联网。比如我们通过一个无线路由…

【Vue3】组件通信之自定义事件

【Vue3】组件通信之自定义事件 背景简介开发环境开发步骤及源码总结 背景 随着年龄的增长&#xff0c;很多曾经烂熟于心的技术原理已被岁月摩擦得愈发模糊起来&#xff0c;技术出身的人总是很难放下一些执念&#xff0c;遂将这些知识整理成文&#xff0c;以纪念曾经努力学习奋…

【重整化群】1.0 to Wilson RG

0. 写在最前面 从高能到统计物理模型RG的技术主要参考 大黄猫的量子多体讲义&#xff0c;杨展如NRG / DMRG 暂时没有想法&#xff0c;编排不出内容有趣的零碎内容&#xff0c;如 CFT&#xff0c;Z2 Lattice gauge, Fermi field 重整化零碎内容&#xff0c;下篇文章将逐一讲述 …

UE5.4内容示例(4)UI_UMG - 学习笔记

https://www.unrealengine.com/marketplace/zh-CN/product/content-examples 《内容示例》是学习UE5的基础示例&#xff0c;可以用此熟悉一遍UE5的功能 UI示例 UI_UMG &#xff1a;基本UMGUI_CommonUI &#xff1a;UMG多层应用UI_SlatePostBuffer UI &#xff1a;FX的示例&…

python中的print函数总结

文章目录 打印变量打印数学计算多行文本复制n次字符串 x*n,n*x不换行输出多个数据换行符制表位转义原字符字符串切片格式化字符串千位分隔符&#xff08;只适用于整数和浮点数&#xff09;浮点数小数部分的精度字符串类型&#xff0c;.表示最大的显示长度整数类型浮点数类型 打…

<Qt> 常用控件

目录 一、控件概述 二、QWidget 核心属性 &#xff08;一&#xff09;QWidget的核心属性概览 1. enabled 2. geometry 3. WindowFrame的影响 4. windowTitle 5. window Icon 6. windowOpacity 7. cursor 8. font 9. toolTip 10. focusPolicy 11. styleSheet 三、…

docker网络介绍net

docker 几种网络模式 bridge模式 使用–netbridge参数指定网络模式&#xff0c;docker的默认模式就是bridge模式&#xff0c;默认选择bridge的情况下&#xff0c;容器启动的时候会通过DHCP获取一个ip地址&#xff0c;这可能不是我们想要的&#xff0c;在centos系统下&#xff…

springboot给类进行赋初值的四种方式

目录 1. 使用Value和ConfigurationProperties2. 使用PropertySource创建Person.java写一个测试类 3. 使用ImportResourceStudent类创建beans.xml在主类中引入测试 心得 1. 使用Value和ConfigurationProperties 这里不加赘述了&#xff0c;前面我也发过&#xff0c;这里就放个链…

redis--分布式锁(1)

分布式锁的基本需求 互斥性&#xff1a;在任何时刻&#xff0c;只有一个客户端能持有锁。无死锁&#xff1a;即使一个客户端在持有锁的期间崩溃&#xff0c;其他客户端也能获得锁。容错性&#xff1a;分布式锁的实现应该能够容忍部分组件的失败&#xff0c;例如&#xff0c;锁服…