refresh
2022-06-22 16:44:39 2 举报
AI智能生成
spring实例化流程
作者其他创作
大纲/内容
获取beanFactory,解析beandifinition
ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory();<br>
注册特殊的beanpostprocess后置处理器
prepareBeanFactory(beanFactory);<br>
比如注册ApplicationContextAwareProcessor<br>
会去实现aware的许多功能
触发beanFactory后置处理器
invokeBeanFactoryPostProcessors(beanFactory);<br>
1、实例化所有实现了BeanFactoryProcess的接口的类实例化
2、调用postProcessBeanFactory
实例化后置处理器
registerBeanPostProcessors(beanFactory);<br>
实例化所有实现了BeanPostProcess的类
实例化剩下的单例bean<br>
finishBeanFactoryInitialization(beanFactory);<br>
beanFactory.preInstantiateSingletons();<br>
遍历所有beanname,如果是单例、非懒加载、非抽象的就调用getbean()<br>
doGetBean
转换别名transformedBeanName
getSingleton() 缓存中获取bean<br>
一级缓存没有,且正在创建中,就把三级缓存的转移到二级缓存,同时返回<br>
getSingleton(beanname,()->{createbean()})<br>
设置状态创建中beforeSingletonCreation
调用doGetBean方法singletonFactory.getObject()
回调初始化前处理器resolveBeforeInstantiation<br>
doCreateBean创建bean
实例化bean createBeanInstance
把实例化的bean丢入三级缓存池
详解一下获取三级缓存的方法(AOP就是这里开始的???)
populateBean 属性赋值<br>
回调初始化后处理器<br>
依赖注入通过postProcessPropertyValues回调实现<br>
AutowiredAnnotationBeanPostProcessor由于实现了InstantiationAwareBeanPostProcessor接口<br>
initializeBean初始化对象
invokeAwareMethods 调用部分实现了aware接口的方法,还有一部分通过注册的applicationContextAware调用
applyBeanPostProcessorsBeforeInitialization
后置处理器回调
注意@init和@destory注解是通过后置处理器实现的,所以也会在此刻回调<br>
invokeInitMethods<br>
InitializingBean 实现了此接口的方法<br>
applyBeanPostProcessorsAfterInitialization<br>
后置处理器回调
Object earlySingletonReference = getSingleton(beanName, false);<br>
移除2、3级缓存,全部放入一级缓存addSingleton<br>
AOP原理?
import原理?
0 条评论
下一页