码迷,mamicode.com
首页 > 编程语言 > 详细

Spring 的 BeanPostProcessor接口实现

时间:2017-11-25 23:33:55      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:.net   object   tor   files   factory   ebe   uga   spring   color   

http://blog.csdn.net/chensugang/article/details/3423650

 

今天学习了一下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");

Spring 的 BeanPostProcessor接口实现

标签:.net   object   tor   files   factory   ebe   uga   spring   color   

原文地址:http://www.cnblogs.com/xingzc/p/7896965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!