spring源码解析图示,和spring生命周期总结,和spring扩展接口

1.介绍

内容是我在编译spring源码5.2.x后,调试完源码之后通过学习时的笔记整理而成,此链接是画的一个整体的流程图示:

https://www.processon.com/view/link/6567f4d514cd414d201eb5d2

2.spring生命周期总结

bean的生命周期
* 1.容器完成扫描,ASM技术把扫描到的符合要求的文件读取出来,变成 beanDefinition put到bdMap中
* 2.遍历这个map,依次获取mergedBd,然后进行解析和验证
* 3.调用第一次 getSingleton() 从单例池获取一下这个bean
* 4.通过bd获取这个bd所对应的class --- 原先是 ASM - MeteData
* 5.通过class信息去推断构造方法
* 6.利用这个构造方法去反射实例化对象
* 7.缓存注入的属性的信息 (放到mergedBeanDefinition进行缓存工作,主要把这个类中加了Autowired
*                      的属性和方法,放到一个map中,方便后面需要注入属性的时候,直接get)
* 8.为循环依赖进行准备工作,判断容器是否支持循环依赖,提前暴露当前的bean工厂
* 9.判断当前容器是否允许属性注入 允许属性注入则完成属性填充
* 10.执行 3个aware接口的回调,beanFactoryAware、beanNameAware、beanClassLoaderAware
* 11.执行其它aware如 ApplicationContextAware 和 生命周期初始化回调的注解版 @PostConstruct
* 12.执行生命周期回调的接口版和xml版 如 InitializingBean
* 13.完成aop
* 14.返回对象放到SingletonObjects

可根据图中流程进行对比此生命周期总结,图示更加详细

3.spring扩展接口

 * 实现                                       重写
 * 1.
 * InstantiationAwareBeanPostProcessor          postProcessBeforeInstantiation
 * 2.确定构造方法,继而实例化对象
 * SmartInstantiationAwareBeanPostProcessor     determineCandidateConstructors
 * 3.完成了beanDefinition的合并
 * MergedBeanDefinitionPostProcessor            postProcessMergedBeanDefinition
 * 4.主要为了在循环依赖的时候能够从三级缓存当中获取一个扩展好的对象
 * SmartInstantiationAwareBeanPostProcessor     getEarlyBeanReference
 * 5.判断当前容器是否允许属性注入
 * InstantiationAwareBeanPostProcessor          postProcessAfterInstantiation
 * 6.填充属性
 * InstantiationAwareBeanPostProcessor          postProcessProperties
 * 7.执行部分aware接口、执行生命周期的初始化回调 注解版
 * BeanPostProcessor                            postProcessBeforeInitialization
 * 8.事件的发布、代理
 * BeanPostProcessor                            postProcessAfterInitialization
对于直接实现 BeanPostProcessor 的类,只能作用在 bean生命周期的:执行生命周期回调注解版 和 Aop 两个阶段
要作用在 bean生命周期的其它阶段,则需要间接实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值