一、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"'。

最新文章

  1. Ext JS 4 老特征:statics 静态的变量和方法
  2. 宏_CRTIMP分析
  3. Ubuntu加上一个命令搜索路径/etc/ environment
  4. __stack_chk_fail栈检查失败
  5. JAVA基础知识(2)--队列的操作
  6. 201521123015 《Java程序设计》第七周学习总结
  7. Python进阶_mysql(1)
  8. 深入学习:Windows下Git新手教程(上)
  9. SpringCloud使用Nacos服务发现实现远程调用
  10. PHP语言入门的学习方法十要素
  11. vue axios 封装(三)
  12. jmeter5.0 while controller使用总结
  13. c++试题2
  14. 使用AndroidStudio运行eclipse开发的app项目
  15. 设置MyEclipse字体大小
  16. 1.WebApi介绍
  17. linux,软链接配置node,npm全局命令
  18. linux man指令问题
  19. Java中有两种实现多线程的方式以及两种方式之间的区别
  20. RPC-原理及RPC实例分析

热门文章

  1. H3C SecPath 防火墙端口回流
  2. iis无法加载样式
  3. Oracle使用虚拟表dual一次插入多条记录
  4. java 中递归的实现 以及利用递归方法实现汉诺塔
  5. 对dpkg: error processing package xxx (--configure) 的处理
  6. Scala学习---映射和元祖
  7. Lucene全文检索技术
  8. HDU 5860 Death Sequence
  9. selenium webdriver学习-怎么等待页面元素加载完成
  10. kali Rolling安装之后的一些常用配置总结