0
点赞
收藏
分享

微信扫一扫

【Spring】- 容器扩展点(Container Extension Points)

【BeanPostProcessor】

调用时机:

  1. org.springframework.beans.factory.config.BeanPostProcessor#postProcessBeforeInitialization
  1. Bean的属性值填充之后,初始化回调(如InitializingBean的afterPropertiesSet或自定义初始化方法)之前
  1. org.springframework.beans.factory.config.BeanPostProcessor#postProcessAfterInitialization
  1. bean初始化回调(如InitializingBean的afterPropertiesSet或自定义初始化方法)之后
  2. 对于FactoryBean,将为FactoryBean实例和由FactoryBean创建的对象调用这个回调

提示:

  1. 可以使用Order接口来定义执行顺序
  2. 其作用域为每个容器,当有父子容器的时候需要注意其作用域
  3. 当通过在配置类上使用@Bean工厂方法声明BeanPostProcessor时,工厂方法的返回类型应该是实现类本身,或者至少是org.springframework.beans.factory.config.BeanPostProcessor接口,清楚地指示该bean的后处理器性质。否则,ApplicationContext不能在完全创建它之前按类型自动检测它
  4. 当使用BeaFactory.addBeanPostProcessor注册时,执行顺序是按照添加的顺序,这时候Ordered接口无效

DEMO:

  • AutowiredAnnotationBeanPostProcessor

【BeanFactoryPostProcessor】

调用时机:

  1. 在Bean实例化之前

DEMO:

  1. PropertyOverrideConfigurer
  2. PropertySourcesPlaceholderConfigurer

【FactoryBean】

当有较为复杂的初始化代码时,可以使用该接口

举报

相关推荐

0 条评论