【BeanPostProcessor】
调用时机:
- org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization
- Bean的属性值填充之后,初始化回调(如InitializingBean的afterPropertiesSet或自定义初始化方法)之前
- org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization
- bean初始化回调(如InitializingBean的afterPropertiesSet或自定义初始化方法)之后
- 对于FactoryBean,将为FactoryBean实例和由FactoryBean创建的对象调用这个回调
提示:
- 可以使用Order接口来定义执行顺序
- 其作用域为每个容器,当有父子容器的时候需要注意其作用域
- 当通过在配置类上使用@Bean工厂方法声明BeanPostProcessor时,工厂方法的返回类型应该是实现类本身,或者至少是org.springframework.beans.factory.config.BeanPostProcessor接口,清楚地指示该bean的后处理器性质。否则,ApplicationContext不能在完全创建它之前按类型自动检测它
- 当使用BeaFactory.addBeanPostProcessor注册时,执行顺序是按照添加的顺序,这时候Ordered接口无效
DEMO:
AutowiredAnnotationBeanPostProcessor
【BeanFactoryPostProcessor】
调用时机:
- 在Bean实例化之前
DEMO:
PropertyOverrideConfigurer
PropertySourcesPlaceholderConfigurer
【FactoryBean】
当有较为复杂的初始化代码时,可以使用该接口