1. 注册 BPP 的 BD


2. 创建 BPP
在 refresh () 的 6. registerBeanPostProcessors ()
,将所有 BeanPostProcessor 注册到容器中。注意:只是注册但并未执行 ❕%%
1926-🏡⭐️◼️CommonAnnotationBeanPostProcessor 与 AutowiredAnnotationBeanPostProcessor ?🔜MSTM📝 都实现了 MergedBeanDefinitionPostProcessor,在 invokeBeanPostProcessor 中创建 BPP,并执行 postProcessMergedBeanDefinition 方法◼️⭐️-point-202302061926%%
%%
▶31.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230323-1910%%❕ ^er3o6i


执行 CommonAnnotationBeanPostProcessor
的方法 postProcessMergedBeanDefinition
实际调用了其父类 InitDestroyAnnotationBeanPostProcessor
的方法,在其中调用方法 findLifecycleMetadata
获取生命周期元数据并保存

❕%%
0914-🏡⭐️◼️CommonAnnotationBeanPostProcessor 中用到了双重检查锁 ?🔜MSTM📝 在第 11 步初始化剩下的单实例 Bean 的过程中,在真正初始化方法调用之前,InitDestroyAnnotationBeanPostProcessor 继承了 BeanPostProcessor,在执行 postProcessBeforeInitialization 方法时,会查找 lifeCycleMetadataCache,这里就用到了双重检查锁。其实在存入的时候,在第三个后置处理器,MergedBeanDefinitionPostProcessor 的 postProcessMergedBeanDefinition 方法中,也是调用了同一个方法,即 findLifecycleMetadata◼️⭐️-point-202302120914%%
%%
▶34.🏡⭐️◼️【🌈费曼无敌🌈⭐️第一步⭐️】◼️⭐️-point-20230323-2007%%❕ ^0ty81n


在 InitDestroyAnnotationBeanPostProcessor
. postProcessBeforeInitialization
findLifecycleMetadata–>metadata.invokeInitMethods


5. 执行顺序


注解版@PostConstruct 在初始化之前,而 XML 方式是在初始化之后,AfterPropertiesSet 之后


https://www.bilibili.com/video/BV1CS4y1e7xo/?spm_id_from=..search-card.all.click&vd_source=c5b2d0d7bc377c0c35dbc251d95cf204
6. 实战经验
7. 参考与感谢