BeanPostProcessor,Bean的后置处理器
在spring中,对bean的扩展集中在各种beanPostProcessor中,下面是一些后置处理器调用的地方以及调用方法:
1、
在调用doCreateBean函数之前调用,此时bean还没有进行实例化,如果此方法的返回结构部位空,则会将其返回作为bean的实例
2、
在构造函数实例化之后调用
4、
5、
BeanFactoryPostProcessor beanFactory的后置处理器
在refresh函数中的invokeBeanFactoryPostProcessors这一步中进行调用,分BeanDefinitionRegistryPostProcessor和常规beanFactoryPostProcessor,前者会先调用postProcessBeanDefinitionRegistry,这里有个常见的情况,是PropertyPlaceholderConfigurer,他是一种常规的beanFactoryPostProcessor,而mybatis的MapperScannerConfigure是一个BeanDefinitionRegistryPostProcessor,所以会先调用,这时候如果对MapperScannerConfigure的占位符处理就会不成功,此时需要设置processProtertyPlaceHolders为true进行手动处理
在spring中,对bean的扩展集中在各种beanPostProcessor中,下面是一些后置处理器调用的地方以及调用方法:
1、
InstantiationAwareBeanPostProcessor postProcessBeforeInstantiation(beanClass, beanName)
在调用doCreateBean函数之前调用,此时bean还没有进行实例化,如果此方法的返回结构部位空,则会将其返回作为bean的实例
2、
MergedBeanDefinitionPostProcessor postProcessMergedBeanDefinition
在构造函数实例化之后调用
3、
InstantiationAwareBeanPostProcessor postProcessAfterInstantiation postProcessPropertyValues
在进行依赖注入的时候调用
4、
BeanPostProcessor postProcessBeforeInitialization(Object bean, String beanName)
在进行初始化方法调用之前调用,初始化方法可以是实现了InitializingBean afterPropertiesSet方法,也可以是自定义的init-method方法
5、
BeanPostProcessor postProcessAfterInitialization(Object bean, String beanName)
在初始化方法之后调用
BeanFactoryPostProcessor beanFactory的后置处理器
在refresh函数中的invokeBeanFactoryPostProcessors这一步中进行调用,分BeanDefinitionRegistryPostProcessor和常规beanFactoryPostProcessor,前者会先调用postProcessBeanDefinitionRegistry,这里有个常见的情况,是PropertyPlaceholderConfigurer,他是一种常规的beanFactoryPostProcessor,而mybatis的MapperScannerConfigure是一个BeanDefinitionRegistryPostProcessor,所以会先调用,这时候如果对MapperScannerConfigure的占位符处理就会不成功,此时需要设置processProtertyPlaceHolders为true进行手动处理