zoukankan      html  css  js  c++  java
  • Spring的后置处理器BeanPostProcessor

    一、BeanPostProcessor接口的作用

    如果我们需要在Spring容器完成Bean的实例化、配置和其他的初始化前后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现,然后注册到容器中去。

    二、如何实现BeanPostProcessor接口

    BeanPostProcessor有两个方法需要实现:postProcessorAfterInitialization、postProcessorBeforeInitialization。

    Java代码:

    import org.springframework.beans.factory.config.BeanPostProcessor;
    public class TestBeanPostProcessor implements BeanPostProcessor {
    
        /**
         * 实例化之后进行处理
         */
        public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    
        /**
         * 实例化之前进行处理
         */
        public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
            return bean;
        }
    }

    前者在初始化代码调用之后调用。

    后者在实例化及依赖注入完成后,在任何初始化代码(比如配置文件中的init-method)调用之前调用。

    三、BeanFactory和ApplicationContext对待bean后置处理器稍有不同

    1. ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean。并把他们注册为后置处理器,然后在容器创建bean的适当时候调用它。因此部署一个后置处理器同部署其他bean并没有什么区别。

    <bean class="TestBeanPostProcessor" />

    2. 而使用BeanFactory实现的时候,bean后置处理器必须通过代码显式的去注册,在IOC容器集成体系中ConfingurableBeanFactory接口中定义了注册方法。

    例如:

    TestBeanPostPrcessor beanPostProcessor = new TestBeanPostPrcessor();
    Resource resource = new FileSystemResource("applicationContext.xml");
    ConfigurableBeanFactory factory = new XmlBeanFactory(resource);
    factory.addBeanPostProcessor(beanPostProcessor);
    factory.getBean("logic");

    注意:

    1. 接口中的两个方法都要将传入的bean返回、而不能返回Null。否则getBean将无法取得目标。

    2. 如将BeanPostProcessor标记为延迟初始化,则无法注册,自定义逻辑也就无法得到应用。假如你在<beans/>元素的定义中使用了'default-lazy-init'属性,则各个BeanPostProcessor需标记为'lazy-init="false"'。

  • 相关阅读:
    [数字信号处理]离散傅里叶变换及其性质
    [数字信号处理]序列的逆z变换
    [数字信号处理]序列的z变换
    [数字信号处理]从傅里叶级数到傅里叶变换
    [物理]简谐振动总结
    [数字信号处理]常系数差分方程
    [数字信号处理]时域离散系统
    [数字信号处理]入门基本概念
    团队作业6-复审与事后分析
    Alpha阶段项目复审
  • 原文地址:https://www.cnblogs.com/libra0920/p/6118157.html
Copyright © 2011-2022 走看看