spring 启动流程 bean生命周期 循环依赖问题

本文详细介绍了Spring框架的启动流程,包括资源加载、Bean定义注册、BeanFactory创建等步骤,阐述了Bean的生命周期、后置处理事件机制以及如何处理循环依赖问题,是理解Spring核心概念的基础。
摘要由CSDN通过智能技术生成

Spring框架的启动流程、Bean的生命周期、后置处理事件以及循环依赖原理是Spring框架中非常重要的概念。下面我会逐一解释这些概念。

1. Spring启动流程

Spring的启动流程主要包括以下几个步骤:

  1. 资源加载:Spring通过ResourceLoader接口加载配置文件,如XML或JavaConfig。
  2. Bean定义注册:将加载的配置信息(如<bean>标签)转换为BeanDefinition对象,并注册到BeanFactory中。
  3. BeanFactory创建:根据BeanDefinition创建BeanFactory实例。
  4. 后置处理器注册:注册BeanPostProcessorBeanFactoryPostProcessor等后置处理器。
  5. 单例Bean创建:创建并初始化所有标记为单例的Bean。
  6. 完成初始化:完成所有的初始化工作,包括调用Bean的afterPropertiesSet方法,以及执行所有BeanPostProcessor的postProcessAfterInitialization方法。

2. Bean生命周期

Spring中Bean的生命周期可以分为以下几个阶段:

  1. 实例化:根据Bean定义创建Bean的实例。
  2. 属性填充:通过依赖注入(DI)填充Bean的属性。
  3. 自定义初始化:如果Bean实现了InitializingBean接口,则调用其afterPropertiesSet方法。
  4. BeanPostProcessor:如果BeanPostProcessor的postProcessBeforeInitialization方法返回非null,则使用该返回值替代Bean实例。之后调用postProcessAfterInitialization方法。
  5. 自定义销毁:如果Bean实现了DisposableBean接口,则调用其destroy方法。
  6. 销毁回调:调用Bean的destroy-method指定的方法。

3. 后置处理事件

Spring中的后置处理事件主要通过ApplicationListenerApplicationEvent实现。当某个事件发生时,Spring会发布一个ApplicationEvent,所有注册了相应事件的ApplicationListener都会收到通知并处理该事件。例如,当Context初始化或刷新时,会发布相应的事件。

4. 循环依赖原理

循环依赖是指两个或多个Bean相互依赖,形成一个闭环。Spring解决循环依赖的主要原理是:

  1. 三级缓存:Spring在DefaultSingletonBeanRegistry中使用了三级缓存来存储Bean的实例。第一级缓存存储完全初始化的Bean,第二级缓存存储早期曝光的Bean(即仅完成了实例化的Bean),第三级缓存存储Bean的BeanDefinition
  2. 早期曝光:当一个Bean在创建过程中需要注入另一个尚未初始化的Bean时,Spring会先将其放入第二级缓存,然后提供一个代理对象给需要注入的Bean。当这个Bean完成初始化后,再从第二级缓存中取出,并放入第一级缓存。

通过这种方式,Spring可以解决循环依赖的问题。

以上就是Spring启动流程、Bean生命周期、后置处理事件以及循环依赖原理的简要介绍。这些概念是Spring框架的核心,理解它们对于掌握Spring框架非常重要。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值