一、常用postProcessor
1、BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor
例子:MapperScannerConfigurer
作用:扫描配置路径下bean,添加到IOC容器。
invokeBeanFactoryPostProcessors
执行 BeanDefinitionRegistryPostProcessor->postProcessBeanDefinitionRegistry
MapperScannerConfigurer 扫描所有Mapper,创建出MapperFactory放入到BeanDefinitionRegistry
2、InstantiationAwareBeanPostProcessor extends BeanPostProcessor
postProcessProperties
例子:AutowiredAnnotationBeanPostProcessor
作用:组件创建完成后对属性赋值。
3、 AutowiredAnnotationBeanPostProcessor extends BeanNameAware
中 setBeanFactory
例子:AutowiredAnnotationBeanPostProcessor
作用:自动赋值FactoryBean
4、ApplicationContextAwareProcessor extends BeanPostProcessor
中postProcessBeforeInitialization ,setApplicationContext
例子:ApplicationContextAware
作用:组件创建完成后给组件赋
setEnvironment
setEmbeddedValueResolver
setResourceLoader
setApplicationEventPublisher
setMessageSource
setApplicationContext
5、@PostConstruct
组件创建完成后初始化方法。
6、InitializingBean
例子:SqlSessionFactoryBean
作用:组件创建完成后默认调用afterPropertiesSet方法。
7、init-method
组件创建完成后初始化方法。
二、执行顺序
(1)、invokeBeanFactoryPostProcessors
中执行BeanDefinitionRegistryPostProcessor类型的postProcessBeanDefinitionRegistry方法。
(2)、finishBeanFactoryInitialization 中
createBean 中
resolveBeforeInstantiation执行InstantiationAwareBeanPostProcessor类型的postProcessBeforeInstantiation方法。
doCreateBean
①、createBeanInstance
②、applyMergedBeanDefinitionPostProcessors
中 postProcessMergedBeanDefinition,发现@PostConstruct注解放入集合
③、populateBean
1.InstantiationAwareBeanPostProcessor 的postProcessAfterInstantiation
2.InstantiationAwareBeanPostProcessor类型(AutowiredAnnotationBeanPostProcessor) 调用 postProcessProperties
④、initializeBean
1.invokeAwareMethods 的 setFactroyBean …
2.InstantiationAwareBeanPostProcessor类型的后置处理器(CommonAnnotationBeanPostProcessor、ApplicationContextAwareProcessor)调用 postProcessBeforeInitialization(执行PostConstruct标注的类,或setApplicationContext)
3.afterPropertiesSet
4.initMethodName
5.BeanPostProcessor 的 postProcessAfterInitialization