一、核心步骤
提前引用进行动态代理
后置处理器进行动态代理
二、具体步骤
1.获取bean
- AbstractBeanFactory#doGetBean
2.第一次去单例池查询bean
- 最终调用:DefaultSingletonBeanRegistry#getSingleton(java.lan
g.String, boolean)
3.获取不到bean 创建Bean
AbstractAutowireCapableBeanFactory#createBean)
4.创建bean实例
AbstractAutowireCapableBeanFactory#createBeanInstance
5. 填充属性:
AbstractAutowireCapableBeanFactory#populateBean
1.准备填充、2.解决自动填充、3.填充属性
6.初始化
AbstractAutowireCapableBeanFactory#initializeBean(.String, Object,RootBeanDefinition)
6.1 初始化步骤
7 aop处理
后置处理(触发动态代理)
AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
创建动态代理AbstractAutoProxyCreator#postProcessAfterInitialization
进行创建动态代理:AbstractAutoProxyCreator#createProxy
三、整体运行栈
#获取Bean
AbstractBeanFactory.doGetBean
#第一次查询
DefaultSingletonBeanRegistry.getSingleton()
#二、创建
#开始创建
AbstractAutowireCapableBeanFactory.doCreateBean
#创建实例
createBeanInstance()
#填充属性1.填充准备、2解决自动填充3、填充属性
populateBean
#初始化
initializeBean
#填充 beanName
invokeAwareMethods
#前置处理
applyBeanPostProcessorsBeforeInitialization
#初始化方法
invokeInitMethods
#后置处理(AOP动态代理)
applyBeanPostProcessorsAfterInitialization
#三、AOP处理
#后置处理触发动态代理
AbstractAutowireCapableBeanFactory#applyBeanPostProcessorsAfterInitialization
#创建动态代理
AbstractAutoProxyCreator#createProxy
# 四、解决循环依赖,提前引用
#提前引用
getEarlyBeanReference()
#创建代理
createProxy()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)