bean 生命周期完美分析
2020-03-09 14:56:55 0 举报
bean 生命周期完整过程--赶紧开
作者其他创作
大纲/内容
ApplicationContextAwareProcessor
afterPropertiesSet
结束
addSingletonFactory--解决依赖的map
postProcess_MergedBeanDefinition
1.【缓存】@resouce 注解的字段 @postCOnstruct 方法
applyBeanPostProcessors_Before_Initialization
applyMergedBeanDefinitionPostProcessors(解析依赖注解对应封装缓存)
InitDestroyAnnotationBeanPostProcessor(父)
BeanPostProcessor
1.给bean 设置额外是的spirng内部值
MergedBeanDefinitionPostProcessor 的 处理器 解析 注解信息封装为对象到缓存,如将(1). @resouce 注解的字段解析后放入 CommonAnnotationBeanPostProcessor 所维护的一个 缓存里,@postCOnstruct 解析的方法放到 它的父类 InitDestroyAnnotationBeanPostProcessor 的一个缓存(2). @Autowired 注解的字段和 方法 对应两个缓存 放到 AutowiredAnnotationBeanPost 种
populateBean(利用上面解析的缓存完成)
1.解析@Resouce依赖的候选bean
后置处理器 实现 都用 黄色 表示 后置处理器接口都用虚线框表示,接口方法用 空白
如果 经过它处理能返回bean不为空,那么就会直接调用最后一步即 init_after 操作,返回对象
postProcessBeforeInitialization
(先)CommonAnnotaionBeanPostProcessor
开始
实例化beancreateBeanInstance
是,执行其
applyBeanPostProcessors_Before_Instantiation
2.解析@Autowired 所依赖的候选bean
2. 【缓存 】@Autowired 注解的字段和 方法
initializeBean
determineCandidateConstructors
SmartInstantiationAwareBeanPostProcessor
applyBeanPostProcessors_After_Initialization
postProcessPropertyValues
判断bean是否是实现isInitializingBean接口
通过AnnotationAwareAspectJAutoProxyCreator 调用postProcessAfterInitialization 生成代理对象
(后)AutowiredAnnotationBeanPost
2.执行 @postConstruct
postProcessAfterInstantiation
AnnotationAwareAspectJAutoProxyCreator
如果目标bean 是采用的有参构造即 构造器注入 来完成属性依赖关系的化, 这里面不仅是实例化了,还会同时处理候选bean 的生命,完成依赖注入(默认是No 模型 的byType 技术)
MergedBeanDefinitionPostProcessor
注意:是先调用了实例化后的处理的,只不过实例化是返回boolean 所以不需要太关注postProcessAfterInstantiation
理解: 分为2个大块---实例化前后 + 初始化前后 --> 6 小块即: instant_iation 前后 Init_ialization 前后1.实例化,和初始化 都用 “紫色” 表示2.将所有的前后执行 都用 ”蓝色“ 表示
resolveBeforeInstantiation
InstantiationAwareBeanPostProcessor
invokeInitMethods
postProcessAfterInitialization
isInitializingBean接口
主要判断bean是否是特点接口类,以给bean 添加设置额外的属性值
postProcessBeforeInstantiation
诊断构造器
0 条评论
回复 删除
下一页