一张图让你读懂spring bean的生成过程

本文旨在提供对Spring Bean生成的整体理解,包括Bean的实例化过程、属性装填、循环依赖解决及初始化方法调用。首先介绍了Bean生成的两个阶段:BeanDefinition的合并与Bean的实例化。接着详细讲解了实例化前的操作,如产生代理的时机;通过工厂方法、构造方法等方式实例化Bean;以及如何在属性装填过程中解决循环依赖问题。最后,概述了初始化方法调用和Bean的前后置处理器在处理过程中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

@TOC​​​​

目的:

不拘泥与具体细节,对spring bean的生成能有一个整体的把握。

图片整体预览

在这里插入图片描述

正文

spring bean的生成主要分为两个阶段,第一个是bean Definition的生成
,第二个是bean的生成。也就是本文的主要内容。
对于spring实例初始一个bean,我们主要分析一下几点

  • 子类beanDefinition合并父类bean Definition的一些数据;
  • bean实例化之前的操作介绍resolveBeforeInstantiation(产生代理的时机)
  • 实例化bean的几种方式 createBeanInstance
    • 工厂方法创建
    • 带参数的构造方法创建
    • 默认的构造方法创建
  • 注入数学过程如何解决循环依赖
  • bean实例化后属性的装填工作populateBean
    • 名称注入
    • 类型注入
  • 初始化bean initializeBean方法调用
    • 处理 bean 的前置处理器
    • 执行 init-method 方法
    • 处理 bean 的后置处理器
      以上几点是按照上图,方法的调用顺序依次介绍。也是bean生成过程的顺序介绍。

子类beanDefinition合并父类bean Definition的一些数据;

这块主要是图片中这部分的介绍在这里插入图片描述
子类的bean因为是继承了父类bean,所以在创建子类时需要合并一些父类的属性到子类中,主要是getMergedLocalBeanDefinition()
这个方法不是很重要,这里就不贴源码占用大家时间了。

bean实例化之前的操作介绍resolveBeforeInstantiation(产生代理的时机)

这个小结主要介绍的是下图这块的内容
在这里插入图片描述
贴个入口代码

            // Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
			Object bean = resolveBeforeInstantiation(beanName, mbdToUse);
			if (bean != null) {
   
				return bean;
			}

我们创建代理是通过一个后置处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值