实现了Spring的Aware接口的自定义类什么时候执行的?

news2024/11/25 22:52:02

在之前的内容中

Spring的Aware接口有什么用?_轻尘×的博客-CSDN博客_aware接口的作用

了解到用户可以通过实现相应的Aware接口来获取spring框架提供的能力,俗称“攀亲戚”

以如下代码为例,自定义类MyAware实现了BeanFactroryAware,希望在MyAware中攀上BeanFactory这个亲戚,那spring是什么时候给我beanFactory的呢?来探究一下

@Component
public class MyAware implements BeanFactoryAware {


	BeanFactory beanFactory;

	@Override
	public void setBeanFactory(BeanFactory beanFactory) throws BeansException {

		this.beanFactory = beanFactory;
	}
}

spring在实例化MyAware是遵循和其他bean相同的流程,也就是getBean→doGetBean→createBean→doCreateBean→initializeBean这一套

我们通过debug堆栈信息就能看出

 

镜头给到initializeBean,第一行代码

 在创建每一个bean时,都会执行一下这个invokeAwareMethods,这段代码的逻辑很简单,就是判断当前的bean是否是Aware类型的,如果是,具体是哪种


	private void invokeAwareMethods(String beanName, Object bean) {
		if (bean instanceof Aware) {
			if (bean instanceof BeanNameAware) {
				((BeanNameAware) bean).setBeanName(beanName);
			}
			if (bean instanceof BeanClassLoaderAware) {
				ClassLoader bcl = getBeanClassLoader();
				if (bcl != null) {
					((BeanClassLoaderAware) bean).setBeanClassLoader(bcl);
				}
			}
			if (bean instanceof BeanFactoryAware) {
				((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);
			}
		}
	}

很明显,我们这里是最后一种,BeanFactoryAware

然后它就会执行到

((BeanFactoryAware) bean).setBeanFactory(AbstractAutowireCapableBeanFactory.this);

也就是我们MyAware类本身的setBeanFactory,完成“攀亲戚”的过程

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/52217.html

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

相关文章

数据库、计算机网络,操作系统刷题笔记5

数据库、计算机网络,操作系统刷题笔记5 2022找工作是学历、能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得学数据库,sql,oracle&…

【MySQL基础】MySQL常用的图形化管理工具有那些?

目录 一、为什么要使用MySQL图形化管理工具 原因 / 目的 / 作用 二、什么是DOS窗口? 三、常见的MySQL图形化管理工具有那些? 四、 常见几个MySQL图形工具的介绍 Navicat SQLyog MySQL Workbench DataGrip 五、Navicat图形工具的安装与使用 第一步&#x…

python带你制作随机点名系统,超级简单

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 在某些难以抉择得时候,我们经常要用外力来帮助我们做出选择 比如,课堂随机点名或面对活动需要人上台表演时等等场景 这个时候,有一个随机点名系统就非常好啦,毕竟运气得事~ …

QT之 给控件添加右键菜单

一、效果预览 二、代码 cpp文件 //listView右键菜单 void MainWindow::Rightclicklistview() {//初始化一级菜单TotalRightclick new QMenu(this);AddDevice new QMenu(this);upDevice new QAction(this);DownDevice new QAction(this);Delete new QAction(this);EditDev…

压缩包里的文件名可以这样隐藏起来

我们知道,压缩后的文件如果有保密需要,可以给压缩包设置打开密码。 设置密码后,还是可以打开压缩包,也可以看到压缩包里面的文件名称,当你点击里面的文件,才会提示需要输入密码后才能打开文件。 如果希望加…

数据运算——逻辑运算

数据运算——逻辑运算一、逻辑运算1.通过例题掌握位模式层次上的逻辑运算2.位模式层次上的逻辑运算的应用1.**与运算使指定位复位**2.**或运算使指定位置位**3.**异或运算使指定位取反**二、移位运算1.逻辑移位2.循环移位3.算术移位算术右移算术左移举例1>.(算术右移)2>.…

KepServer EX6模拟仿真PlC数据以及点表的复制跟项目的迁移

一.模拟plc数据绑定标点 1.新建通道选择“Simulator” 右击 “连接性”》新建通道选择Simulator 填写通道名称(自定义) 然后一直默认设置点击下一页知道完成!!! 添加展示 2.给通道添加设备 右击通道》添加设备 设备名自定义 然后一直默认进行下一步…

[附源码]计算机毕业设计springboot人事管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

使用WPS生成二维码,手机扫码访问主机的资源

问题描述 如果我们想要使用二维码,包装一个链接,访问目标资源。 在淘宝上可以看到,一些网店提供制作二维码服务。其实我们自己也可以做。 原理是:我们把资源发送给商家,商家拿到后,将资源部署到服务器上…

ARM cortex-M4核中断实验 中断和串口

要求:按键触发时,LED灯状态取反,并且在串口工具打印一句话。 KEY1按键按下,LED1状态取反,串口工具打印key1 down!!!! GPIO模块: UART模块: 主函数: 实验现象&#xff1a…

2022世界杯漫谈与猜想,谁是你心目中的第一

文章目录0、 我与足球1、卡塔尔世界杯2、亚洲球队水平3、中国足球4、展望0、 我与足球 1、第一次意义上的踢足球还是初中,记得是五四青年节说全校搞一场足球比赛,我们班莫名其妙的组了一个队,然后在放学后提提足球,那时候规则都不…

JSON端口操作实例

JSON 端口可直接实现在 JSON 和 XML 之间进行转换。端口会自动检测输入文件是 JSON 还是 XML,然后将文件在两种格式间相互转换。 该端口较多的是运用在API接口调用集成方案的项目当中,我们以百思买项目为例,知行之桥将接收到的百思买的EDI报…

针对海洋数据的管理三维gis软件系统有何优势

海洋地理信息系统是以深海、水质、海表层、空气及海岸带人类活动为研究对象,经过综合利用地理信息系统的室内空间海洋数据处理方法、GIS和绘图系统集成化、三维算法设计、海洋数据信息仿真模拟和界面显示等功能,为多种来源的数据信息给予协调性坐标、储存和集成化信息内容等专用…

springboot整合jett导出数据(2)

一 操作案例 1.1 pom文件 <dependency><groupId>net.sf.jett</groupId><artifactId>jett-core</artifactId><version>0.11.0</version></dependency> 1.2 代码 /*** author liujianfu* description 导出 环保指标查询…

基于java+springmvc+mybatis+vue+mysql的婚纱影楼

项目介绍 婚姻是每个人人生中都非常重要的一个组成部分&#xff0c;它是一个新家庭的开始也是爱情的见证&#xff0c;所以很多人在结婚之前都会拍一套美美的婚纱照来纪念这一美好的时刻&#xff0c;但是很多时候人们在拍婚纱照的时候都是到当地的影楼去拍摄&#xff0c;这种影…

React基础

文章目录1.简介1.1 react与vue1.1.1 相同点1.1.2 不同点1.1.3 函数式组件的特点&#xff08;什么是函数式组件&#xff09;a.幂等b.无副作用用&#xff1a;1.1.4 虚拟dom的作用1.1.5 vue当中template与render的关系&#xff1a;1.2 MVC、MVVM、MVP模式1.2.1 MVC1.2.2 MVVM1.2.3…

速锐得解码特斯拉Model Y整车网关电路及CAN通信协议DBC控制策略

研究和解码特斯拉Model Y的整车控制中心的控制策略&#xff0c;比研究一般宝马、奔驰、奥迪的CAN总线数据更有乐趣&#xff0c;速锐得近期解码了特斯拉Model Y整车网关电路&#xff0c;分析出特斯拉Model Y网关电路图及CAN矩阵并编译了特斯拉Model Y通信协议DBC文件。 研究特斯…

SOLIDWORKS 3D CAD 2023基础解决方案 新功能Top 10

SOLIDWORKS 3D CAD 2023新版本即将于大家见面&#xff0c;而SOLIDWORKS 3D CAD是SOLIDWORKS整体解决方案的基础功能&#xff0c;微辰三维为您总结了SOLIDWORKS 3D CAD 2023增强功能的Top 10&#xff0c;一起来看看吧&#xff01; 1、电力布线 轻松创建含多个电路的接头&#xf…

天宇优配|上架秒光 “3时代”的大额存单受宠

“最近理财产品动摇比较大&#xff0c;准备处理一笔大额存单&#xff0c;但查询发现&#xff0c;某国有行暂时没有可购买的大额存单产品。”11月29日&#xff0c;成都市民王女士向金融出资报记者表示。 记者发现&#xff0c;虽然通过数次下调&#xff0c;中长期大额存单利率已步…

储能电源/移动电源专用升降压DC-DC方案PL9405

PL9405是一个双向同步4开关Buck-Boost变换器能够调节输出电压高于或低于输入电压。PL9405在较宽的输入电压范围内工作3.6 V至32v(最大36v)支持多种应用程序。集成两个9mΩ功率mosfet。PL9405可在1、2、3、4、5的充电模式下工作6电池充电。PL9405采用恒定ON时间控制buck&#xf…