关于Spring中的@Configuration中的proxyBeanMethods属性
@Configuration的proxyBeanMethods属性
在@Configuration
注解中,有两个属性:
value
配置Bean名称proxyBeanMethos
,默认是true
这个proxyBeanMethods
的默认属性是true。
直接说:当@Configuration
注解的proxyBeanMeathods
属性是true时,那么此类的Bean就会被Spring代理,被代理就意味着此类中的方法得到的增强处理。那么此类中通过@Bean
来对外提供Bean的方法就会被增强
我们可以看一下:
这是一个被@Configuration
修饰的类
@Configuration
public class DBConfig {}
我们获取一下这个Bean,打印一下类型
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
System.out.println(ctx.getBean("DBConfig"));
// com.liumingkai.config.DBConfig$$EnhancerBySpringCGLIB$$ef2610c5@5bfa9431
可以看到,打印出来的类型不是DBConfig
,而是被代理后的类型DBConfig$$EnhancerBySpringCGLIB
,(可以看到这是CGLib代理出来的类,因为JDK动态代理只能处理有接口的类,而CGlib是通过继承的方式来做代理的)
当设置proxyBeanMethos
的属性是false时,得到的就是此类型,不再是代理类
System.out.println(ctx.getBean("DBConfig"));
// com.liumingkai.config.DBConfig@710726a3
我们知道,被@Bean
修饰的方法的返回对象,会被注册进入Spring的容器中,受Spring的管理
那将@Configuration
的proxyBeanMethods
的属性设置为true
会有什么好处呢?
因为@Configuration
注解通常用来修饰配置类,会在此类中配置大量的配置项或者用来对外提供Bean
该配置类中通过@Bean
来对外提供Bean的方法会被增强,每次都会返回Spring容器管理的Bean
演示一下
例如:在@Configuration
修饰的类,在此类中有一个被@Bean
修饰的方法,用来对外提供Bean。
我们获取到此类型的Bean后,可以像普通方法一样来调用这个被@Bean
修饰的方法,会得到返回的对象。
区别在于:
- 当
proxyBeanMethods
属性为true时,此类被代理,方法得到增强,那么我们每次通过此类型的Bean来调用@Bean
修饰的方法,每次返回的都是Spring容器中的单例Bean - 当
proxyBeanMethods
属性是false时,此类型的Bean就是一个普通的Bean,未被代理,那么每次调用@Bean
修饰的方法,这都是一个普通的方法,返回的都是新的普通的对象,不是被Spring容器管理的对象
测试
例如;
- 先来看,当
proxyBeanMethods
为false时
@Configuration(proxyBeanMethods = false)
public class DBConfig {@Beanpublic DruidDataSource getDruidDataSource() {return new DruidDataSource();}
}
测试
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);// 获取此类型的Bean,查看类型
DBConfig dbConfig = ctx.getBean("DBConfig", DBConfig.class);
// 查看类型
System.out.println(dbConfig);
// com.liumingkai.config.DBConfig@f2ff811
// 就是普通的类型,未被代理// 调用此Bean上被@Bean修饰的方法
System.out.println(dbConfig.getDruidDataSource() == dbConfig.getDruidDataSource());
// false 证明此方法就是普通的方法,每次都会创建一个对象
- 再来看
proxyBeanMethods
为true的情况
@Configuration
public class DBConfig {@Beanpublic DruidDataSource getDruidDataSource() {return new DruidDataSource();}
}
测试
ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
// 获取此类型的Bean,查看类型
DBConfig dbConfig = ctx.getBean("DBConfig", DBConfig.class);
// 查看类型
System.out.println(dbConfig);
// com.liumingkai.config.DBConfig$$EnhancerBySpringCGLIB$$ef2610c5@5bfa9431
// 可以看到这是一个被代理后的类,不再是原先的类型了// 调用此Bean上被@Bean修饰的方法
// 此方法是被增强后的,每次都会返回Spring容器中的单例Bean
System.out.println(dbConfig.getDruidDataSource() == dbConfig.getDruidDataSource());
// true 证明此方法返回的是Spring容器中的单例Bean
总结
被@Configuration
修饰的类,本质上也是一个Bean
- 当
@Configuration
中的proxyBeanMethods
属性默认是true
,意味着这个类会被代理,这个类中通过@Bean
修饰的方法会被增强,调用这个方法时,会直接返回受Spring容器管理的Bean(Spring容器中的Bean默认都是单例的) - 而如果
@Configuration
中的proxyBeanMethods
属性是false
,那么此配置类就是一个普通的类,未被代理。因此调用被@Bean
修饰的方法,就是一个普通的方法,每次调用都会返回一个新的对象
相关文章:
![](https://www.ngui.cc/images/no-images.jpg)
关于Spring中的@Configuration中的proxyBeanMethods属性
Configuration的proxyBeanMethods属性 在Configuration注解中,有两个属性: value配置Bean名称proxyBeanMethos,默认是true 这个proxyBeanMethods的默认属性是true。 直接说:当Configuration注解的proxyBeanMeathods属性是true…...
![](https://www.ngui.cc/images/no-images.jpg)
dp1,ACM暑期培训
D - 摆花 P1077 [NOIP2012 普及组] 摆花 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) Description 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆。通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花&…...
![](https://img-blog.csdnimg.cn/img_convert/33eca9fda70e3e6243b4e0c380dcd8bd.png)
大厂程序员的水平比非大厂高很多嘛?
最近一个月,筛选了一百多份简历,前前后后面试了二三十人,基本上都是有大厂经历的人。同时,也录用了几个有大厂经历的。但整体而言,打破了对大厂出来的都是优质人才的幻觉。看到的实际情况与想象中的落差还是比较大的。…...
![](https://img-blog.csdnimg.cn/img_convert/ca51fe1ccdd344a9d6714721500e47fc.png)
Java开发工具MyEclipse发布v2023.1.2,今年第二个修复版!
MyEclipse一次性提供了巨量的Eclipse插件库,无需学习任何新的开发语言和工具,便可在一体化的IDE下进行Java EE、Web和PhoneGap移动应用的开发;强大的智能代码补齐功能,让企业开发化繁为简。 MyEclipse v2023.1.2官方正式版下载 …...
![](https://img-blog.csdnimg.cn/9b6f46d4ced14b5d94cb18f81fdc55ce.jpeg)
基于正交滤波器组的语音DPCM编解码算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 ...........................................................g0zeros(1,lenH); g1zeros(1,l…...
![](https://img-blog.csdnimg.cn/0d7f0587db0e46cda8d65f4f7d2306c6.bmp)
VS2022和QT混合编程打包发布程序
1.在开始菜单输入 CMD 找到 Qt5.15.2(MSVC 64-bit) 2.输入windeployqt exe所在路径 3.运行完毕后,双击打开exe文件,可能会报错,缺少相关的dll,找到缺少的dll拷贝到运行文件夹下即可。...
![](https://img-blog.csdnimg.cn/d40ba3019e2544fb9f7e4c4a696018a9.png#pic_center)
Filebeat学习笔记
Filebeat基本概念 简介 Filebeat是一种轻量级日志采集器,内置有多种模块(auditd、Apache、Nginx、System、MySQL等),针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。之所以能实现这一点&#…...
![](https://www.ngui.cc/images/no-images.jpg)
【实战】 九、深入React 状态管理与Redux机制(一) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十六)
文章目录 一、项目起航:项目初始化与配置二、React 与 Hook 应用:实现项目列表三、TS 应用:JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…...
![](https://www.ngui.cc/images/no-images.jpg)
第九十五回 如何使用dio的转换器
文章目录 概念介绍使用方法使用默认的转换器自定义转换器 示例代码经验分享 我们在上一章回中介绍了"如何打造一个网络框架"相关的内容,本章回中将介绍 如何使用dio的转换器.闲话休提,让我们一起Talk Flutter吧。 概念介绍 转换器主要用来转…...
![](https://img-blog.csdnimg.cn/img_convert/c728ee90f79001251241436617f7c74d.jpeg)
Python深度学习“四大名著”之一【赠书活动|第二期《Python机器学习:基于PyTorch和Scikit-Learn》】
近年来,机器学习方法凭借其理解海量数据和自主决策的能力,已在医疗保健、 机器人、生物学、物理学、大众消费和互联网服务等行业得到了广泛的应用。自从AlexNet模型在2012年ImageNet大赛被提出以来,机器学习和深度学习迅猛发展,取…...
![](https://img-blog.csdnimg.cn/81eba3a0aef14fd6989c344e29725d25.png)
RAID相关知识
简介 RAID ( Redundant Array of Independent Disks )即独立磁盘冗余阵列,通常简称为磁盘阵列。RAID技术将多个单独的物理硬盘以不同的方式组合成一个逻辑磁盘,从而提高硬盘的读写性能和数据安全性。 数据组织形式 分块&#x…...
![](https://img-blog.csdnimg.cn/62f40dd573af4afd9d1eb8180686f4bd.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBATHRNYW1iYQ==,size_20,color_FFFFFF,t_70,g_se,x_16)
DataStructure--Basic
程序设计数据结构算法 只谈数据结构不谈算法就跟去话剧院看梁山伯与祝英台结果只有梁山伯在演,祝英台生病了没来一样。 本文的所有内容都出自《大话数据结构》这本书中的代码实现部分,建议看书,书中比我本文写的全。 数据结构,直…...
![](https://img-blog.csdnimg.cn/70a4c515de544114b5767ae9e737e924.png)
Intellij IDEA 双击启动报错ClassNotFoundException: com.licel.b.z@
项目场景: 新从官网下载了ideaIU-2023.2.win.zip ,安装后双击启动报错, 无法运行idea, 提示信息如下 问题描述 Internal error. Please refer to https://jb.gg/ide/critical-startup-errorsjava.lang.ExceptionInInitializerErrorat java…...
![](https://img-blog.csdnimg.cn/1894be3719c047a1a08f4571dd05dd71.png)
使用 Logstash 及 enrich processor 实现数据丰富自动化
在我之前的文章: Elasticsearch:enrich processor (7.5发行版新功能) Elasticsearch:使用 Elasticsearch ingest pipeline 丰富数据 通过上面的两篇文章的介绍,我们应该充分掌握了如何使用 enrich proce…...
![](https://img-blog.csdnimg.cn/6069c7d6e03143ef88bb37995b5bf0f1.png)
Django模板语法和请求
1、在django关于模板文件加载顺序 创建的django项目下会有一个seeetings.py的文件 如果在seeetings.py 中加了 os.path.join(BASE_DIR,‘templates’),如果是pycharm创建的django项目会加上,就会默认先去根目录找templates目录下的html文件,…...
![](https://img-blog.csdnimg.cn/img_convert/bc189a239d539b36699b78c4ea177cbf.webp?x-oss-process=image/format,png)
Android跨进程传大图思考及实现——附上原理分析
1.抛一个问题 这一天,法海想锻炼小青的定力,由于Bitmap也是一个Parcelable类型的数据,法海想通过Intent给小青传个特别大的图片 intent.putExtra("myBitmap",fhBitmap)如果“法海”(Activity)使用Intent去传递一个大的Bitmap给“…...
![](https://img-blog.csdnimg.cn/a902d61049294760891e7bfdb7c3e9ad.png)
【动态规划part13】| 300.最长递增子序列、674.最长连续递增序列、718.最长重复数组
目录 🎈LeetCode 300.最长递增子序列 🎈LeetCode 674. 最长连续递增序列 🎈LeetCode 718. 最长重复子数组 🎈LeetCode 300.最长递增子序列 链接:300.最长递增子序列 给你一个整数数组 nums ,找到其…...
![](https://img-blog.csdnimg.cn/7539da8879554dd5a56170dc34443512.png#pic_center)
QMainWindow
文章目录 QMainWindow基本元素QMainWindow函数介绍简单的示例效果图 QMainWindow QMainWindow是一个为用户提供主窗口程序 的类,包含一个菜单栏(menu bar)、多个工具栏 (tool bars)、多个锚接部件(dock widgets)、―个 状态栏(status bar )及一个中心部件(central …...
![](https://img-blog.csdnimg.cn/5c484a35c536427ea558f9f5b7002a38.png)
PV操作解决经典进程同步问题
一.经典同步问题 在学习《操作系统》时,会接触到进程的概念,其中不可避免的接触到进程同步问题,今天我们用熟悉的PV操作解决一些经典的进程同步问题。 二.生产者-消费者问题 1.问题描述 问题描述:一组生产者进程和一组消费者进…...
![](https://img-blog.csdnimg.cn/5d2c62993bf248479efa38374cc92d54.jpeg)
一文3000字从0到1使用Selenium进行自动化测试
对于很多刚入门的测试新手来说,大家都将自动化测试作为自己职业发展的一个主要阶段。可是,在成为一名合格的自动化测试工程师之前,我们不仅要掌握相应的理论知识,还要进行大量的实践,积累足够的经验,以便快…...
![](https://img-blog.csdnimg.cn/img_convert/7a9f4c72702309c55218ad3278b6dcbe.jpeg)
基于开源IM即时通讯框架MobileIMSDK:RainbowChat v9.0版已发布
关于MobileIMSDK MobileIMSDK 是一套专门为移动端开发的开源IM即时通讯框架,超轻量级、高度提炼,一套API优雅支持UDP 、TCP 、WebSocket 三种协议,支持iOS、Android、H5、标准Java平台,服务端基于Netty编写。 工程开源地址是&am…...
![](https://img-blog.csdnimg.cn/5b73091b18fc46d78dc885f7d1d70551.png)
交叉编译----宿主机x86 ubuntu 64位-目标机ARMv8 aarch64
1.交叉编译是什么,为什么要交叉编译 编译:在一个平台上生成在该平台上的可执行代码交叉编译:在一个平台上生成在另一个平台上的可执行代码交叉编译的例子:如51单片机的可执行代码(hex文件)是在集成环境kei…...
![](https://img-blog.csdnimg.cn/994162f875ce41dfb970b0db28e920de.jpeg)
安防监控视频汇聚平台EasyCVR修改录像计划等待时间较长是什么原因?
安防监控视频EasyCVR视频融合汇聚平台基于云边端智能协同,支持海量视频的轻量化接入与汇聚、转码与处理、全网智能分发等。音视频流媒体视频平台EasyCVR拓展性强,视频能力丰富,具体可实现视频监控直播、视频轮播、视频录像、云存储、回放与检…...
![](https://www.ngui.cc/images/no-images.jpg)
深度学习调参指南
1. 选择合适的模型架构 模型的结构(层数和宽度),参数配置,尽量用已经有效的模型 2. 选择优化器 针对具体的问题,从选择常用的优化器开始,进行比较 3. 选择BatchSize 1). Batch Size决定训练速度,但是不影响验证集…...
![](https://www.ngui.cc/images/no-images.jpg)
MYSQL 优化常用方法
1、选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可…...
![](https://img-blog.csdnimg.cn/img_convert/2c302f6137865f75a2ec306f5d620806.png)
isp调试工具环境搭建及其介绍!
一、isp调试环境搭建: 后期调试isp,是在rv1126提供的RKISP2.x Tuner工具上进行调试,所以我们大前提必须要把这个环境和一些操作先搞熟悉来,后面有一些专用术语,我们遇到了再去看,现在专门看一些专用术语&am…...
![](https://img-blog.csdnimg.cn/38a45678e57b4efa8c0489a689059cbb.png)
word显示书签并给书签添加颜色
CTRg 定位书签 在 Word 的用户界面中,没有直接的选项可以批量为所有书签设置颜色。但你可以使用 VBA 宏或者编写自定义的功能来实现这个需求。这里给出一个简单的 VBA 宏,它可以设置当前文档中所有书签内文本的颜色:vba Sub ColorAllBookmark…...
![](https://www.ngui.cc/images/no-images.jpg)
Rust系列(四) trait备忘录(持续更新)
上一篇:Rust系列(三) 类型系统与trait 基于官方文档进行简单学习记录,保证所有示例是可运行的基本单元。测试rust程序除了使用官方的playground之外,还可以通过定义[[example]]来运行程序。 文章目录 1. Deref2. DerefMut 1. Deref 用于不可…...
![](https://www.ngui.cc/images/no-images.jpg)
贪心算法总结及其leetcode题目N道
1 我为什么要写这个总结 1.1 字节笔试题 小明在玩一场通关游戏,初始血量为1,关卡有怪兽或者有血包(正数就是血包可回血数,负数说明是怪兽的伤害值),当捡到血包时会加血量,碰到怪兽时会掉血&am…...
![](https://www.ngui.cc/images/no-images.jpg)
k8s的namespace一直处于terminating的解法
先试了强制替换,无法替换掉,强制删除,也删除不掉namespace [rootmaster k8s-study]# vi ns-demo.yaml [rootmaster k8s-study]# kubectl create -f ns-demo.yaml namespace/demo created [rootmaster k8s-study]# kubectl get -f ns-demo.ya…...
![](https://img0.pconline.com.cn/pconline/1707/28/9673325_20160622_698398fa7ce559ac91aeNjGmtUcNjTVD_thumb.jpg)
建设职业技术学院网站/seo学校
电脑在我们的生活中被使用的是越来越广泛了。当我们使用电脑的时候,都是需要连接网络的。连上了网络之后,我们才可以获取到更多的消息。在联网的时候,都是需要一个ip的。Ip就是互联网相连的协议。这个ip除了可以自动生成之外,我们…...
![](https://img-blog.csdnimg.cn/img_convert/9521ddbbb056171525eea7a4d8c6f204.png)
网站后台登陆密码忘记/百度百家号注册
今天,有个同事找到我,说他前几天在centos linux系统上安装的mariadb数据库登陆不上去了,问我有没有办法。我登陆系统以后,打了一个用root登陆,密码为空的命令“mysql –u root -p”就直接登陆上去了,而后面…...
![](/images/no-images.jpg)
做五金行业的外贸网站/荥阳网络推广公司
给客户的电脑装了杀毒软件,趋势企业版Worry-Free™ Business Security Standard Edition,一台作为服务器,其他大概6台左右为员工机器。最近客户报告问题:1无法更改桌面背景图片(重启后又变回原来的桌面(纯色…...
![](https://img2018.cnblogs.com/blog/772631/201810/772631-20181009144550738-1312807518.png)
做金属的网站/汕头网站关键词推广
一、编译出错, 1. 包含头文件出错 解决方案: 需要下载1803 的wdk 最新的1809会出一堆错误 安装程序显示是10.0.17134.1安装完成后是10.0.17134.0 2. Inf2Cat Double click to see 项目--》属性--》Info2Cat--》Run Inf2Cat 属性 是 - 置空 3. Error:不能将"c…...
佛山外贸网站建设价位/珠海百度搜索排名优化
不管是在APP还是PC,不管是Loading页,还是在音乐播放器中,进度条的运用都非常广泛,形式也多种多样,让人眼花缭乱。做为一个交互设计新手,项目中也经常碰到进度条设计,总有很多疑惑在心中挥之不去…...
![](https://img-my.csdn.net/uploads/201209/04/1346768868_8778.png)
如何把字体导入wordpress/郑州seo联系搜点网络效果好
1.Class文件基础 (1)文件格式Class文件的结构不像XML等描述语言那样松散自由。由于它没有任何分隔符号,所以,以上数据项无论是顺序还是数量都是被严格限定的。哪个字节代表什么含义,长度是多少,先后顺序如何…...