本篇文章为大家展示了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接口中定义了注册方法