Spring IOC容器初始化之Bean创建流程深入剖析

RTL8211F千兆PHY原理图与PCB设计:从手册到量产的完整指南 在工业网关、边缘计算和FPGA/CPU以太网扩展设计中,千兆PHY芯片的稳定运行取决于外围电路的精细设计。RTL8211F(I)作为应用广泛的物理层收发器,其原理图设计涉及电源域划分、时钟与复位时序、RGMII/ MDIO接口匹配以及MDI差分网络等多个环节。正确理解数据手册的阅读顺序,掌握100Ω差分阻抗控制、等长约束和EMI布局技巧,是保证链路可靠性和信号完整性的关键。本文从芯片选型与数据手册解析切入,系统梳理从电源去耦到PCB布局布线的工程实践要点,帮助工程师规避Link不稳定、MDIO读取失败、吞吐 阅读详情

一. SpringBean的生命周期图

二. Bean⽣命周期关键时机点

思路:创建⼀个类 LagouBean ,让其实现⼏个特殊的接⼝,并分别在接⼝实现的构造器、接⼝⽅法中断点,观察线程调⽤栈,分析出 Bean 对象创建和管理关键点的触发时机。

LagouBean类

package com.lagou.edu;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

/**
 * @Author 应癫
 * @create 2019/12/3 11:46
 */
public class LagouBean implements InitializingBean, ApplicationContextAware {

	private ItBean itBean;

	public void setItBean(ItBean itBean) {
		this.itBean = itBean;
	}

	/**
	 * 构造函数
	 */
	public LagouBean(){
		System.out.println("LagouBean 构造器...");
	}


	/**
	 * InitializingBean 接口实现
	 */
	public void afterPropertiesSet() throws Exception {
		System.out.println("LagouBean afterPropertiesSet...");
	}

	public void print() {
		System.out.println("print方法业务逻辑执行");
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
		System.out.println("setApplicationContext....");
	}
}

BeanPostProcessor 接⼝实现类

package com.lagou.edu;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;

/**
 * @Author 应癫
 * @create 2019/12/3 16:59
 */
public class MyBeanPostProcessor implements BeanPostProcessor {

	public MyBeanPostProcessor() {
		System.out.println("BeanPostProcessor 实现类构造函数...");
	}

	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		if("lagouBean".equals(beanName)) {
			System.out.println("BeanPostProcessor 实现类 postProcessBeforeInitialization 方法被调用中......");
		}
		return bean;
	}

	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		if("lagouBean".equals(beanName)) {
			System.out.println("BeanPostProcessor 实现类 postProcessAfterInitialization 方法被调用中......");
		}
		return bean;
	}
}

BeanFactoryPostProcessor 接⼝实现类

package com.lagou.edu;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Component;

/**
 * @Author 应癫
 * @create 2019/12/3 16:56
 */
public class MyBeanFactoryPostProcessor implements BeanFactoryPostProcessor {

	public MyBeanFactoryPostProcessor() {
		System.out.println("BeanFactoryPostProcessor的实现类构造函数...");
	}

	@Override
	public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
		System.out.println("BeanFactoryPostProcessor的实现方法调用中......");
	}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="
 http://www.springframework.org/schema/beans
 https://www.springframework.org/schema/beans/spring-beans.xsd
">
 <bean id="lagouBean" class="com.lagou.LagouBean"/>
 <bean id="myBeanFactoryPostProcessor"
class="com.lagou.MyBeanFactoryPostProcessor"/>
 <bean id="myBeanPostProcessor" class="com.lagou.MyBeanPostProcessor"/>
</beans>

三. Bean创建流程源码剖析

(一)通过最开始的关键时机点分析,我们知道Bean创建⼦流程⼊⼝在AbstractApplicationContext#refresh()⽅法的finishBeanFactoryInitialization(beanFactory) 处。

 (二)进⼊finishBeanFactoryInitialization

 (三)继续进⼊DefaultListableBeanFactory类的preInstantiateSingletons⽅法,我们找到下⾯部分的代码,看到⼯⼚Bean或者普通Bean,最终都是通过getBean的⽅法获取实例

 (四)继续跟踪下去,我们进⼊到了AbstractBeanFactory类的doGetBean⽅法,这个⽅法中的代码很多,我们直接找到核⼼部分

 (五)接着进⼊到AbstractAutowireCapableBeanFactory类的⽅法,找到以下代码部分

 (六)进⼊doCreateBean⽅法看看,该⽅法我们关注两块重点区域

1. 创建Bean实例,此时尚未设置属性

 2. 给Bean填充属性,调⽤初始化⽅法,应⽤BeanPostProcessor后置处理器

 

通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 通达信指标加密DLL加密解密三个公式源码准确率90%以上超级指标精准买卖绝世指标 1 超级指标 指标公式:买卖提示非常明显(适合通达信) 指标源码如下: M:3 100 60 N 3 100 30 散户线: 100*(HHV(HIGH,M)-CLOSE)/(HHV(HIGH,M)-LLV(LOW,M));RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:=SMA(RSV,5,1); D:=SMA(K,3,1); J:=3*K-2*D;主力 阅读详情

相关推荐

城市NOA加速落地,BEV+Transformer引领自动驾驶感知新范式

数据闭环能力的建立,不仅依赖于数据规模,还依赖于数据的筛选、回传、标注、训练、验证与再部署,数据之于自动驾驶的价值再被印证的同时,也将推动自动驾驶迈向更为高阶的智能化时代。6月份,理想汽车向早鸟用户推送了首个不依赖高精地图的城市NOA。而特斯拉推出的基于BEV+Transformer的自动驾驶感知路线,可将2D图像转化为BEV鸟瞰图视角下的3D图像,并基于更庞大、更复杂、参数更多的感知算法模块,利用Transformer的注意力机制,将各个传感器统一到同一个连续的四维(三维空间+一维时间)时空中。

manfukeji的博客 1398

【Spring基础之IOC】Spring IOC创建bean的几种方式

二.注册/创建bean的几种方式。 准备工作: 1.创建新的maven项目: 2.引入相关的maven依赖 由于spring-context内部已经依赖了spring-beans,spring-core, spring-expression, spring-jcl 等相关jar包,所以只需要暂时引入spring-context包即可。使用 XML 配置,可以让 bean 定义分布在多个 XML 文件上,这种方法直观优雅清晰明显. 通常,每个单独的 XML 配置文件代表架构中的一个逻辑层或模块. 这种配

xwl137487622的博客 681

Quartus的Signal Tap II的使用技巧

Signal Tap II全称Signal Tap II Logic Analyzer,是第二代系统级调试工具,它集成在Quartus II软件中,可以捕获和显示实时信号,是一款功能强大、极具实用性的FPGA片上调试工具软件。传统的FPGA板级调试是由外接的逻辑分析仪连接到FPGA的控制引脚,将内部引号引出至引脚I/O上,接着进行板级调试。

qq_37624854的博客 5899

Spring——IOC容器启动及Bean生成流程

Spring 5.3.9 版本,看看IOC容器启动到底做了些什么事,看看BeanDefination是怎么变成Bean的,Bean生成流程中到底有多少隐藏的拓展接口

共勉 1393

Modelica建模,Modelica语言的学习,技术调研工作

Modelica是由Modelica协会维护、免费开放的物理系统面向对象的统一建模语言规范,为机、电、液、控等多领域复杂工程系统提供了统一的物理建模语言规范。 Modelica作为多学科统一建模仿真的国际标准,被仿真界广泛采用,系统多领域统一建模仿真,已成为世界公认的MBSE和CPS的核心关键支持技术。 Modelica 语法、函数、包、连接器、组件、子系统

xzb5566的专栏 4636

R语言:基于Spatstat包的单变量和双变量平面Ripley‘s K函数分析

因为网上查找得到的R语言K函数分析的资料很少,Spatstat包的介绍也很少,所以抛砖引玉。本文简单介绍了使用R语言spatstat包的Kest,Kcross(Lcross)和Kinhom方法进行了单变量和双变量平面Ripley's K函数分析的方法及代码,希望有所帮助。

hsdcmax的博客 1万+

Spring IoC容器以及Bean的创建过程

1 Spring静态结构介绍 什么是Spring,可以自己网上查询,总之,可以说是一个面向Web应用开发的,轻量级,企业级框架。它包含了如下图所示一些模块,这些模块的详细的概念和所负责的职责,可以通过搜索检索到。 1.1 BeanFactory BeanFactory关键类继承 上图1所示位置, BeanFactory是整个BeanFactoryl类体系中最顶层的接口。 上图2所示, HierachicalBeanFactory 描述了BeanFactory是可以组成...

rendawei636专注医疗软件 1143

秋叶ComfyUI整合包:一键部署AI绘画工作流,解决环境配置难题

在AI绘画和生成式AI领域,Stable Diffusion作为开源的扩散模型,为图像生成提供了强大的技术基础。其核心原理是通过学习数据分布,对随机噪声进行逐步去噪,最终生成高质量的图像。这项技术的价值在于极大地降低了专业图像创作的门槛,并推动了AIGC(人工智能生成内容)在艺术设计、游戏开发、广告营销等场景的广泛应用。然而,其典型工作流实现工具ComfyUI,在实际部署中常因Python环境、PyTorch版本与CUDA驱动之间的复杂依赖关系而受阻,尤其是面对NVIDIA 30系、40系及未来50系等不同

优快云头条 668

【Spring源码】- 03 Spring IoC容器启动之Bean创建流程

上篇已经分析完refresh()中大部分方法,也已经把Bean解析成BeanDefinition注册到IoC容器中,refresh还剩下一个非常重要的方法,就是下面将要分析的:finis...

god_86的专栏 366

大语言模型应用指南:幻觉和偏见问题

大语言模型应用指南:幻觉和偏见问题 1. 背景介绍 1.1 大语言模型的发展历程 1.1.1 早期的语言模型 1.1.2 Tr

AI天才研究院 958

让 Claude Code 接管 SAP 事务流, 用 Python 和 SAP GUI Scripting 做一个真正能干活的 AI Agent

摘要:SAP系统自动化面临的核心瓶颈在于繁琐的GUI操作而非分析能力不足。通过整合Claude AI、Python和SAP GUI Scripting技术,可构建能直接操作SAP界面的智能代理。该方案利用SAP官方提供的脚本接口,实现事务码执行、界面导航、数据提取等自动化操作,特别适用于DMLT过账引擎等复杂错误分析场景。相比传统SQL导出方案,这种GUI级自动化能处理树控件、ALV表格等复杂界面元素,且无需额外API开发,直接在现有SAP GUI会话上工作,在保持原有权限体系的同时显著提升效率。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 321

IOC -- bean的创建过程

Bean的创建过程 refresh finishBeanFactoryInitialization preInstantiateSingletons getBean doGetBean 实例化 属性注入 初始化 总的过程就是这几步,下面详细走一下,从第三步开始 preInstantiateSingletons 该方法是在finishBeanFactoryInitialization方法中被执行。作用是实例化剩余的单实例bean 方法由DefaultListableBeanFactory实现 先获取ioc

linの编程之路 385

用Python实现辅助病案首页主诊断编码:从数据清洗到模型上线(上)

本文介绍了一个使用Python构建AI辅助病案首页主诊断编码系统的完整指南。文章从环境搭建开始,详细讲解了数据准备与清洗策略,包括数据格式标准化、文本清洗与脱敏处理等关键步骤。系统采用深度学习技术处理复杂的医疗文本,解决ICD编码面临的文本复杂性、专业性和数据不一致性等挑战。文中提供了完整的代码实现,涵盖数据预处理、敏感信息脱敏、文本分割等实用功能模块,帮助医疗机构构建可落地、可扩展的智能编码系统,提高编码准确性和工作效率。

AllenLV的博客 924

《深入理解Spring原理》 03-IOC容器初始化之Bean注入详解

Spring可以轻松创建Java企业应用程序,它提供了在企业环境中使用Java语言所需的一切 。要使用Spring 必须要先构建 IOC容器,没有它Spring无法正常工作。本文将详细讲解Spring IOC 初始化机制及学习总结。 如下图所示: 定义了一个Person对象,和一个实现BeanPostProcessor接口的自定义类,本文将以此代码为基础来...

jackcheng1117的博客 1100

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

详解 Spring IOC加载全过程

最近看到一位大神的博客,写的那叫一个详细,自己看了一遍之后想把自己看到的整理一份出来,以后可以随时查阅复习。 首先上几张图: 上面几张图片(来源于网络)大家应该都看过或者大概知道,接下来开始分析ioc的加载过程: ** 首先 **一般开始都是这样一句代码: ApplicationContext context = new ClassPathXmlApplicationContext(&amp;amp;amp;amp;amp;amp;quot;cla...

景川的博客 2万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Spring IOC执行流程简单解析

文章目录IOC的基本使用BeanFactory初始化ApplicationContextrefresh方法obtainFreshBeanFactory方法createBeanFactory方法customizeBeanFactory方法loadBeanDefinitions方法parseBeanDefinitions(root, this.delegate)方法finishBeanFactoryI...

SCUTJAY的博客 2535

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Spring中IOC容器的初始化过程

`原文链接 Spring IOC容器初始化过程分为Resource定位,载入解析,注册。IOC容器初始化过程中不包含Bean的依赖注入。Bean的依赖注入一般会发生在第一次通过getBean向容器索取Bean的时候。 ClassPathXmlApplicationContext初始...

chijunmei7041的博客 180

小编教您Spring源码分析之IoC容器初始化

作为一个java程序员,保守估计一年里也都有300天要和Spring有亲密接触~~像我这种怕是每天都要撸撸Spring,所以这次也要做个深入了解!这次就来看看Spring是怎么初始化IoC容器的

yunheli6451的博客 389

Spring IOC源码解析

在Spring容器创建,并调用refresh()方法时,会刷新容器,并实现IOC过程创建bean。refresh方法中实现IOC的调用的主要方法方法有: registerBeanPostProcessors(beanFactory); 注册BeanPostProcessor,用于拦截bean的创建过程。 finishBeanFactoryInitialization(beanFactory);...

zhoushimiao1990的博客 797

Spring IOC?彻底搞懂它!

目录 引言 BeanFactory 简介 创建 Bean 容器前的准备工作 创建 Bean 容器,加载并注册 Bean Bean 容器实例化完成后 准备 Bean 容器: prepareBeanFactory 初始化所有的 singleton beans 附录 id 和 name 配置是否允许 Bean 覆盖、是否允许循环依赖 profile 工厂模式生成 Bean Fa...

我爱吃土豆 2164

Spring IOC流程源码分析

一、Spring 核心容器 IOC初始化过程 Spring 核心之 IOC 容器初体验 IOC 与 DI IOC(Inversion of Control)控制反转:所谓控制反转,就是把原先我们代码里面需要实现的对象创建,依赖的代码,反转给容器来帮忙实现。 那么必然的我们需要创建一个容器 ,同时需要一种描述来让容器知道需要创建的对象与对象的关系。这个描述最具体表现就是我们所看到的配置文件。 DI(Dependency Injection)依赖注入:就是指对象是被动接受依赖类而不是自己主动去找,换句

cristianoxm的博客 526

SpringFramework源码分析(2):IoC容器AnnotationConfigApplicationContext的创建

1 一点建议 我们在看源码的时候,不应该上来直接就开始读,在对作者的设计意图没有一丁点了解的情况下读源码,就是个从入门到放弃的过程,读完了也不知道到底在干嘛。这里给出一点个人的建议,在阅读源码前,我们需要先弄清楚一个组件或框架的整体流程是什么样子的,如果让我们来实现同样的功能,我们该如何思考以及从哪里下手。读Spring源码前,可以先看下Spring中重要的类有哪些,先有个大体概念与印象,可参考https://blog.youkuaiyun.com/sodawoods/article/details/107240123

sodawoods的博客 279

【Spring源码】Spring IOC 容器源码分析

目录 引言 BeanFactory 简介 启动过程分析 创建 Bean 容器前的准备工作 创建 Bean 容器,加载并注册 Bean Bean 容器实例化完成后 准备 Bean 容器: prepareBeanFactory 初始化所有的 singleton beans 附录 id 和 name 配置是否允许 Bean 覆盖、是否允许循环依赖 profile 工厂模式生成 ...

凡是过往,皆为序章 435

Spring源码解析六 (Bean的初始化)

目录 1. 循环依赖解决 2. FactoryBean情况处理 3. 依赖检查 4. Bean的创建 4.1 实例化bean 4.2 依赖处理 4.3 属性填充 4.4 执行初始化方法 5. Bean生命周期流程 6. IOC容器的关闭 6.1 Web应用中容器的销毁 6.2 非Web应用中容器的销毁 在前面分析IOC容器时有说到, 在IOC容器初始化结束后, 会开始初始...

AN_ERA的博客 921

javadoop:Spring IOC 容器源码分析

Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。 本文采用的源码版本是 4.3.11.RELEASE,算是 5...

mhHao的博客 864

源码剖析_Spring源码高级笔记——Spring IOC源码深度剖析

Spring IOC源码深度剖析好处:提高培养代码架构思维、深入理解框架原则定焦原则︰抓主线宏观原则:站在上帝视角,关注源码结构和业务流程(淡化具体某行代码的编写细节)读源码的方法和技巧断点(观察调用栈)反调(Find Usages)经验(spring框架中doXXX,做具体处理的地方)Spring源码构建下载源码(github)安装gradle 5.6.3(类似于maven) ldea 2019...

weixin_39548193的博客 107
上一篇: Spring IOC容器初始化之获取BeanFactory、BeanDefinition加载解析及注册子流程剖析
下一篇: Spring进阶(二)IOC高级应用及源码深度剖析
enterpc
博客等级 码龄20年 58粉丝 98原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值