Spring Bean 生命周期概述
.4. InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
有一点重要的信息,日志中没有体现出来。设置 Bean 的属性是在执行 BeanPostProcessor
调用之前完成的。在 AbstractAutowireCapableBeanFactory#doCreateBean
方法中,调用了 AbstractAutowireCapableBeanFactory#populateBean
方法来设置属性,然后去调用的 BeanPostProcessor
和 init
方法。 populateBean
方法是通过调用 InstantiationAwareBeanPostProcessor#postProcessProperties
方法来完成注入,其中 CommonAnnotationBeanPostProcessor
, AutowiredAnnotationBeanPostProcessor
分别处理不同的注解。下面是 populateBean
方法更详细的说明。
在注入 Bean 属性之前,调用 InstantiationAwareBeanPostProcessor#postProcessAfterInstantiation
。(从变量 getBeanPostProcessorCache().instantiationAware
中获取列表。)容器完成初始化后,有 ImportAwareBeanPostProcessor
, AnnotationAwareAspectJAutoProxyCreator
, CommonAnnotationBeanPostProcessor
, AutowiredAnnotationBeanPostProcessor
四个 InstantiationAwareBeanPostProcessor
对象。但是,这四个类,没有做任何操作。如果返回值为 false
则中断,不再继续遍历 InstantiationAwareBeanPostProcessor
列表。
ConfigurationClassPostProcessor AnnotationAwareAspectJAutoProxyCreator CommonAnnotationBeanPostProcessor AutowiredAnnotationBeanPostProcessor