zoukankan      html  css  js  c++  java
  • Spring 的 BeanPostProcessor接口实现

    今天学习了一下Spring的BeanPostProcessor接口,该接口作用是:如果我们需要在Spring容器完成Bean的实例化,配置和其他的初始化后添加一些自己的逻辑处理,我们就可以定义一个或者多个BeanPostProcessor接口的实现。

     

     

    下面我们来看一个简单的例子

    package com.spring.test.di;
    
     
    
    import org.springframework.beans.BeansException;
    
    import org.springframework.beans.factory.config.BeanPostProcessor;
    
     
    
    public class BeanPostPrcessorImpl implements BeanPostProcessor {
    
     
    
        // Bean 实例化之前进行的处理
    
        public Object postProcessBeforeInitialization(Object bean, String beanName)
    
               throws BeansException {
    
           System.out.println("对象" + beanName + "开始实例化");
    
           return bean;
    
        }
    
     
    
        // Bean 实例化之后进行的处理
    
        public Object postProcessAfterInitialization(Object bean, String beanName)
    
               throws BeansException {
    
           System.out.println("对象" + beanName + "实例化完成");
    
           return bean;
    
        }
    
    }

    只要将这个BeanPostProcessor接口的实现定义到容器中就可以了,如下所示:

    <bean class="com.spring.test.di.BeanPostPrcessorImpl"/>

    测试代码如下:

    package com.spring.test.di;
    
     
    
    import org.springframework.context.ApplicationContext;
    
    import org.springframework.context.support.FileSystemXmlApplicationContext;
    
     
    
    public class TestMain {
    
     
    
        /**
    
         * @param args
    
         */
    
        public static void main(String[] args) throws Exception {
    
     
    
           // 得到ApplicationContext对象
    
           ApplicationContext ctx = new FileSystemXmlApplicationContext(
    
                  "applicationContext.xml");
    
           // 得到Bean
    
           ctx.getBean("logic");
    
        }
    
    }

    运行以上测试程序,可以看到控制台打印结果:

     

    对象logic开始实例化

    对象logic实例化完成

     

    BeanPostProcessor的作用域是容器级的,它只和所在容器有关。如果你在容器中定义了BeanPostProcessor,它仅仅对此容器中的bean进行后置。它不会对定义在另一个容器中的bean进行任何处理。

     

    注意的一点:

    BeanFactoryApplicationContext对待bean后置处理器稍有不同。ApplicationContext会自动检测在配置文件中实现了BeanPostProcessor接口的所有bean,并把它们注册为后置处理器,然后在容器创建bean的适当时候调用它。部署一个后置处理器同部署其他的bean并没有什么区别。而使用BeanFactory实现的时候,bean 后置处理器必须通过下面类似的代码显式地去注册:

    BeanPostPrcessorImpl beanPostProcessor = new BeanPostPrcessorImpl();
    
    Resource resource = new FileSystemResource("applicationContext.xml");
    
     
    
    ConfigurableBeanFactory factory = new XmlBeanFactory(resource);
    
     
    
    factory.addBeanPostProcessor(beanPostProcessor);
    
     
    
    factory.getBean("logic");
  • 相关阅读:
    关于SNS网络
    面向对象中的IS A和HAS A 问题
    项目进度检查
    【php】php Apache 怎么创建虚拟目录
    【IE6】iframe在IE6下出现横向滚动条的解决方案
    【javascript基础】Javascript的getYear、getFullYear、getUTCFullYear异同
    【java】JAVA环境配置
    UTF8 GBK UTF8 GB2312 之间的区别和关系
    【转发】10 个技巧助你写出卓越的jQuery插件
    【前端优化】你想不到的压缩方法:将javascript文件压缩成PNG图像存储
  • 原文地址:https://www.cnblogs.com/coprince/p/4094286.html
Copyright © 2011-2022 走看看