BeanPostProcessor后置处理器在春天中的作用是什么

  介绍

本篇文章为大家展示了BeanPostProcessor后置处理器在春天中的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

<强> BeanPostProcessor接口作用:

如果我们想在春容器中完成豆实例化,配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。

package  com.test.spring;   import  org.springframework.beans.BeansException;   import  org.springframework.beans.factory.config.BeanPostProcessor;/* *   ,*豆后置处理器   ,* @author  z   ,*   ,*/public  class  PostProcessor  implements  BeanPostProcessor  {   @Override才能   public 才能;Object  postProcessBeforeInitialization (Object 豆,   ,,,,,String  beanName), throws  BeansException  {   ,,,if  (“narCodeService" .equals (beanName)),{//过滤掉豆实例ID为narCodeService   ,,,,,return 豆类;   ,,,}   ,,,System.out.println(“后置处理器处理bean=尽? beanName +“】开始“);   ,,,try  {   ,,,,,thread . sleep (1000);   ,,,},catch  (InterruptedException  e), {   ,,,,,e.printStackTrace ();   ,,,}   ,,,return 豆类;   ,,}   @Override才能   public 才能;Object  postProcessAfterInitialization (Object 豆,   ,,,,,String  beanName), throws  BeansException  {   ,,,if  (“narCodeService" .equals (beanName)), {   ,,,,,return 豆类;   ,,,}   ,,,System.out.println(“后置处理器处理bean=尽? beanName +“】完毕!“);   ,,,try  {   ,,,,,thread . sleep (1000);   ,,,},catch  (InterruptedException  e), {   ,,,,,e.printStackTrace ();   ,,,}   ,,,return 豆类;   ,,}   }

注意:接口中两个方法不能返回零,如果返回零那么在后续初始化方法将报空指针异常或者通过getBean()方法获取不到希伯来文名字实例对象,因为后置处理器从Spring IoC容器中取出豆实例对象没有再次放回奥委会容器中!

将弹簧的后置处理器后处理程序配置到春天配置文件中

& lt; ? xml  version=?.0“,编码=癠TF-8" ?比;   http://www.springframework.org/schema/beans" & lt; beans  xmlns=?;   ,,xmlns: xsi=癶ttp://www.w3.org/2001/XMLSchema-instance", xsi: schemaLocation=癶ttp://www.springframework.org/schema/beans ,,, http://www.springframework.org/schema/beans/spring-beans.xsd"比;   & lt; !——,才能定义一个bean ——比;   ,,& lt; bean  id=皀arCodeService",类=癱om.test.service.impl.NarCodeServiceImpl"比;   ,,& lt;/bean>   & lt;才能bean  id=癰eanLifecycle",类=癱om.test.spring.BeanLifecycle", init方法=癷nit",销毁方法=癱lose"比;   ,,,& lt; property  name=皀ame",价值=https://www.yisu.com/zixun/闭湃?   <属性名="性" value="男">            

<强> BeanPostProcessor API:

public  interface  BeanPostProcessor  {,,//才能实例化,依赖注入完毕,在调用显示的初始化之前完成一些定制的初始化任务,   Object 才能;postProcessBeforeInitialization (Object  bean, String  beanName), throws  BeansException;,,,,//才能实例化,依赖注入,初始化完毕时执行,   Object 才能;postProcessAfterInitialization (Object  bean, String  beanName), throws  BeansException;,   }

由API可以看出:

1:后置处理器的postProcessorBeforeInitailization方法是在bean实例化,依赖注入之后及自定义初始化方法(例如:配置文件中bean标签添加init方法属性指定Java类中初始化方法,
@PostConstruct注解指定初始化方法,Java类实现InitailztingBean接口)之前调用

2:后置处理器的postProcessorAfterInitailization方法是在bean实例化,依赖注入及自定义初始化方法之后调用

注意:

1. beanfactory和ApplicationContext两个容器对待bean的后置处理器稍微有些不同.ApplicationContext容器会自动检测弹簧配置文件中那些bean所对应的Java类实现了BeanPostProcessor
接口,并自动把它们注册为后置处理器。在创建bean过程中调用它们,所以部署一个后置处理器跟普通的豆没有什么太大区别。

2。BeanFactory容器注册bean后置处理器时必须通过代码显示的注册,在国际奥委会容器继承体系中的ConfigurableBeanFactory接口中定义了注册方法

BeanPostProcessor后置处理器在春天中的作用是什么