美文网首页
Spring 基础4 —— 后处理器

Spring 基础4 —— 后处理器

作者: WesleyLien | 来源:发表于2017-12-13 21:37 被阅读0次

    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 后处理器的配置
      <bean id="beanPostProcessor" class="xxx.MyBeanPostProcessor"/>
      
    • 如果使用 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 —— 属性占位符配置器
        <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            <property name="locations">
                <list>
                    <value>xxx.properties</value>
                </list>
            </peoperty>
        </bean>
        
        context Schema 简化:
        <context:property-placeholder location="classpath:xxx.properties"/>
        
      • PropertyOverrideConfigurer —— 重写占位符配置器,它的属性文件指定的信息可以直接覆盖 Spring 配置文件的元数据
        PropertyOverrideConfigurer 的属性文件的格式为:
        // beanName 是属性占位符试图覆盖的 bean 名。peopertyName 是试图覆盖的属性名
        beanName.peopertyName=value
        
        <bean class="org.springframework.beans.factory.config.PropertyOverrideConfigurer">
            <property name="locations">
                <list>
                    <value>xxx.properties</value>
                </list>
            </peoperty>
        </bean>
        
        <context:property-override location="classpath:xxx.properties"/>
        
      • CustomAutowireConfigurer —— 自定义自动装配的配置器
      • CustomScopeConfigurer —— 自定义作用域的配置器

    相关文章

      网友评论

          本文标题:Spring 基础4 —— 后处理器

          本文链接:https://www.haomeiwen.com/subject/wozzixtx.html