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