Spring 基础4 —— 后处理器

Spring 框架提供了很好的扩展性,其 IoC 容器允许通过两个后处理器对 IoC 容器进行扩展

Bean 后处理器:会对容器中的 Bean 进行后处理,对 Bean 功能进行额外的增强

容器 后处理器:对 IoC 容器进行后处理,用于增强容器功能

Bean 后处理器

  • Bean 后处理器会对容器中的 Bean 进行后处理,对 Bean 的功能进行额外增强,如生成代理等
  • 特殊的 Bean,不对外提供服务,无须 id 属性
  • Bean 后处理器实现 BeanPostProcessor 接口,有两个方法:Object postProcessBeforeInitialization(Object bean, String name) 传进进行后处理的 Bean 实例、实例的名字 和 Object postProcessAfterInitialization(Object bean, String name) 传进进行后处理的 Bean 实例、实例的名字
  • Bean 后处理器的配置
    
    
  • 如果使用 BeanFactory 作为容器还需要手动注册,ApplicationContext 则无须
    MyBeanPostProcessor beanPostProcessor = factory.getBean("beanPostProcessor", MyBeanPostProcessor.class);
    factory.addBeanPostProcessor(beanPostProcessor);
    
  • postProcessBeforeInitialization 回调发生在注入依赖关系之后,init-method 之前
  • postProcessAfterInitialization 回调发生在初始化结束后
  • Spring 的两个常见的 BeanPostProcessor 接口实现类
    • BeanNameAutoProxyCreator —— 根据 Bean 实例的 name 属性,创建 Bean 实例的代理
    • DefaultAdvisorAutoProxyCreator —— 根据提供的 Advisor ,对容器内所有的 Bean 实例创建代理

容器后处理器

  • 容器后处理器对 IoC 容器进行后处理,用于增强容器功能
  • 容器后处理器实现 FactoryBeanPostProcessor 接口,有一个方法:postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
  • 如果使用 BeanFactory 作为容器还需要手动注册,ApplicationContext 则无须
  • 可设置多个容器后处理器,可通过 order 属性设置容器后处理器的执行顺序,此时每个容器后处理器也需要实现 Ordered 接口
  • Spring 的四个常见的 FactoryBeanPostProcessor 接口实现类
    • PropertyPlaceholderConfigurer —— 属性占位符配置器
      
          
              
                  xxx.properties
              
          
      
      
      context Schema 简化:
      
      
    • PropertyOverrideConfigurer —— 重写占位符配置器,它的属性文件指定的信息可以直接覆盖 Spring 配置文件的元数据
      PropertyOverrideConfigurer 的属性文件的格式为:
      // beanName 是属性占位符试图覆盖的 bean 名。peopertyName 是试图覆盖的属性名
      beanName.peopertyName=value
      
      
          
              
                  xxx.properties
              
          
      
      
      
      
    • CustomAutowireConfigurer —— 自定义自动装配的配置器
    • CustomScopeConfigurer —— 自定义作用域的配置器

你可能感兴趣的:(Spring 基础4 —— 后处理器)