时间:2021-05-20
BeanPostProcessor接口作用:
如果我们想在Spring容器中完成bean实例化、配置以及其他初始化方法前后要添加一些自己逻辑处理。我们需要定义一个或多个BeanPostProcessor接口实现类,然后注册到Spring IoC容器中。
package com.test.spring;import org.springframework.beans.BeansException;import org.springframework.beans.factory.config.BeanPostProcessor;/** * bean后置处理器 * @author zss * */public class PostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { if ("narCodeService".equals(beanName)) {//过滤掉bean实例ID为narCodeService return bean; } System.out.println("后置处理器处理bean=【"+beanName+"】开始"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if ("narCodeService".equals(beanName)) { return bean; } System.out.println("后置处理器处理bean=【"+beanName+"】完毕!"); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return bean; }}注意:接口中两个方法不能返回null,如果返回null那么在后续初始化方法将报空指针异常或者通过getBean()方法获取不到bena实例对象,因为后置处理器从Spring IoC容器中取出bean实例对象没有再次放回IoC容器中!
将Spring的后置处理器PostProcessor配置到Spring配置文件中
<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://.test.spring;import org.junit.Before;import org.junit.Test;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class T { AbstractApplicationContext applicationcontext=null; @Before public void before() { System.out.println("》》》Spring ApplicationContext容器开始初始化了......"); applicationcontext= new ClassPathXmlApplicationContext(new String[]{"test1-service.xml"}); System.out.println("》》》Spring ApplicationContext容器初始化完毕了......"); } @Test public void test() { applicationcontext.registerShutdownHook(); }}测试结果:
》》》Spring ApplicationContext容器开始初始化了......2017-03-19 10:50:29 INFO:ClassPathXmlApplicationContext-Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@18c92ff9: startup date [Sun Mar 19 10:50:29 CST 2017]; root of context hierarchy2017-03-19 10:50:29 INFO:XmlBeanDefinitionReader-Loading XML bean definitions from class path resource [test1-service.xml]后置处理器处理bean=【narCodeService】开始后置处理器开始调用了后置处理器处理bean=【narCodeService】完毕!后置处理器调用结束了》》》Spring ApplicationContext容器初始化完毕了......2017-03-19 10:50:34 INFO:ClassPathXmlApplicationContext-Closing org.springframework.context.support.ClassPathXmlApplicationContext@18c92ff9: startup date [Sun Mar 19 10:50:29 CST 2017]; root of context hierarchy在Spring机制中可以指定后置处理器调用顺序,通过让BeanPostProcessor接口实现类实现Ordered接口getOrder方法,该方法返回一整数,默认值为 0,优先级最高,值越大优先级越低
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
最近学习Spring的源码,发现一个利器BeanPostProcessor。这个后置处理器可以在bean初始化前后对bean进行操作。我们可以在初始化的时候对自
以苹果X为例,x的处理器是苹果A11+M11协处理器,搭载iOS11操作系统,拍照方面采用后置双摄,支持无线充电和面部识别等功能。 中央处理器(Central
屏幕分辨率为1024×768像素,这点也和之前传闻中的一样,处理器使用的是A5双核处理器,还有FacetimeHD前置摄像头,500万像素的后置摄像
屏幕分辨率为1024×768像素,这点也和之前传闻中的一样,处理器使用的是A5双核处理器,还有FacetimeHD前置摄像头,500万像素的后置摄像
前言在Spring+SpringMVC环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用Spring自带的定时任务处理器@Scheduled注解,另一