spring BeanPostProcessor

9 spring-bean的统一前后置处理器BeanPostProcessor

下面给大家介绍第4种方式,基于实现BeanPostProcessor接口的方式,为啥没放在之前文章中一起介绍,是因为实现BeanPostProcessor的方式是bean的统一前置后置处理而不是基于某一个bean,

定义一个前置后置处理器MyBeanPostProcessor如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
* 定义一个前置后置处理器
*
* @author
* @date 2018年5月6日
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
// 这边只做简单打印 原样返回bean
System.out.println("postProcessBeforeInitialization===="+beanName);
return bean;
}
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// 这边只做简单打印 原样返回bean
System.out.println("postProcessAfterInitialization===="+beanName);
return bean;
}
}

配置类中增加配置如下:

1
2
3
4
@Bean
public MyBeanPostProcessor getMyBeanPostProcessor(){
return new MyBeanPostProcessor();
}

运行测试结果如下:

1
2
3
4
5
6
postProcessBeforeInitialization====org.springframework.context.event.internalEventListenerProcessor
postProcessAfterInitialization====org.springframework.context.event.internalEventListenerProcessor
postProcessBeforeInitialization====org.springframework.context.event.internalEventListenerFactory
postProcessAfterInitialization====org.springframework.context.event.internalEventListenerFactory
postProcessBeforeInitialization====user1
postProcessAfterInitialization====user1

下面简单说一下的使用场景:

  • 1,可以解析bean中的一些注解转化为需要的属性
  • 2,注入处理一些统一的属性,而不用在每个bean中注入
  • 3,甚至可以做一些日志打印时间等


本文大部分转自:51CTO博客-知了123