1、Bean生命周期方法,摘自源码BeanFactory注释。
2、对于InstantiationAwareBeanPostProcessor.postProcessBeforeInstinatiion(继承自BeanPostProcessor) 调用,如果返回了Bean就不需要后续处理。
3、BeanPostProcessors是基于bean级别的后置处理器,用于Bean初始化方法(init-method)前后调用。BeanFactory不会自动注册该处理器,只有Application会自动注册该处理器。
4、Spring中还有一个容器级别的后置处理器,BeanFactoryPostProcessor是在Context初始化的时候对全局BeanDefinition的处理,大多数集成Spring框架(Mybatis,Dubbo)基于注解配置,都是使用容器级别的后置处理器来实现BeanDefinition的注册。包括Spring在实现注解配置的时候也是基于容器级别处理器加载。例如:AnnoactionConfgApplicationContext在初始化的时候就会注入,ConfigurationClassPostProcessor(继承自BeanDefinitionRegistryPostProcessor ->BeanFactoryPostProcessor)后置处理器,通过调用后置处理器,解析配置类注解@ComponentScan,(spring boot 解析@SpringBootApplication)来扫描根目录下的Class文件实现BeanDefinition注册。
5、BeanPostProcessors和BeanFactoryPostProcessor的区别:
- 前者是单个Bean级别,只处理单个Bean,调用的时候Bean已经实例化。
- 后者是容器级别,处理所有BeanDefinition,动用的时候Bean没有实例化。