博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Spring 的 BeanPostProcessor接口实现
阅读量:6037 次
发布时间:2019-06-20

本文共 1892 字,大约阅读时间需要 6 分钟。

转载    

今天学习了一下SpringBeanPostProcessor接口,该接口作用是:如果我们需要在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");
你可能感兴趣的文章
【luogu 1908】逆序对
查看>>
pthread_create线程创建的过程剖析(转)
查看>>
android存储访问框架Storage Access Framework
查看>>
周总结
查看>>
Spring Boot 要点--启动类和热部署
查看>>
Maven配置及本地仓库设置
查看>>
PAT L2-001 紧急救援 —— (多参数最短路)
查看>>
JDK(java se development kit)的构成
查看>>
数据库的备份与恢复
查看>>
Android示例程序剖析之记事本(一)
查看>>
为什么英雄难过美人关?
查看>>
poj 3009 Curling 2.0
查看>>
Tomcat7安装配置 for Ubuntu
查看>>
Linux:命令执行控制&&与||
查看>>
麻球繁衍
查看>>
FreeRTOS栈溢出检查
查看>>
linux下,远程连接mysql
查看>>
浅谈js闭包(closure)
查看>>
【regex】POSIX标准正则表达式库
查看>>
【ACM】HDU1008 Elevator 新手题前后不同的代码版本
查看>>