spring源码分析容器整个生命周期图文详解

注册Bean

在这里插入图片描述

1.注册bean包括bean信息解析,容器创建,注册bean到容器中三部分

2.bean信息解析,会将xml,注解,配置类等信息转换为BeanDefinition,加入到Bean工厂

3.这部分我们重点关注的是BeanFactoryPostProcessor,这是spring容器留给我们扩展用的,
  在容器初始化之前可以添加我们自定义的一些东西,最常见的就是添加bean的注册信息.
  
4.这部分会提前初始化BeanFactoryPostProcessorBeanPostProcessor,BeanPostProcessor用于干预
  后期的bean初始化创建

BeanFactoryPostProcessor继承图

在这里插入图片描述

一般我们更关注BeanFactoryPostProcessor子接口BeanDefinitionRegistryPostProcessor暴露的方法 直接添加我们需要注册的bean定义信息BeanDefinition,BeanFactoryPostProcessor主要干预bean工厂注册

初始化Bean

在这里插入图片描述

在这里插入图片描述

1.初始化单例bean分为创建原始bean,进行依赖注入(执行beanFactoryProcessor依赖注入方法),实例创建完成进行初始化(执行beanFactoryProcessor初始化方法)

2.创建原始对象很简单,只是使用反射调用无参构造方法即可

3.进行依赖注入,就是给属性赋值,并且解决了基本的循环依赖问题

4.实例创建完成进行初始化,执行beanPostProcessor的相关初始化方法,postProcessBeforeInitialization
postProcessAfterInitialization,InitializingBean的afterPropertiesSet方法

BeanPostProcessor继承图

在这里插入图片描述

BeanPostProcessor一般干预bean的创建过程,比如bean的属性注入,依赖,初始化,aop等实现,可以多关注 PostProcessor子接口,一些集成spring的框架多会进行干预创建过程,达到获取一个预期bean

值得关注的PostProcessor

BeanFactoryPostProcessor

1.ConfigurationClassPostProcessor内置,用于解析配置类,帮助注册bean

BeanPostProcessor

1.AutowiredAnnotationBeanPostProcessor内置,用于进行依赖注入属性(IOC)

2.ApplicationContextAwareProcessor内置,用于回调实现了Aware接口,注入
  某些对象
3.AspectJAwareAdvisorAutoProxyCreator整合,用于实现aop  

spring解决循环依赖原理

在这里插入图片描述

原理:
   1.getBean创建一个对象的流程是,先使用无参构造器创建一个对象,然后注入依赖,最后初始化
   
   2.创建完成一个原始对象,马上将对象的引用暴漏出来,调用getSingleton就能返回这个bean了
   
   3.创建完原始对象,马上暴漏引用,退出getBean递归调用
举例:

   1.首先创建对象a,通过初始化一个原始bean
   
   2.假设a对象注入一个b对象,b对象也注入一个a对象
   
   3.a对象创建完成,马上暴漏引用到三级缓存(这个时候属性b还是null4.开始装配a对象的属性b,于是递归调用getBean(b),初始化b对象完成,
   马上暴漏引用到三级缓存(这个时候属性a还是null5.开始装配b对象的属性a,于是递归调用getBean(a),发现在getSingleton(a)
     找到a的引用,b对象装配完毕,b对象创建完成
     
   6.继续回到装配对象a的属性b, a对象的属性b装配完成,a对象创建完成  

总结

可以看到,整个流程围绕 BeanFactoryPostProcessor注册bean,getBean配合BeanPostProcessor初始化 和增强bean实例,来完成整个容器的依赖注入(IOC);同时如果整合了aop,那么会注册AspectJAwareAdvisorAutoProxyCreator类型的BeanPostProcessor,对bean进行增强,来实现aop功能。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值