上文跟大家简单介绍了下springBean生命周期的初始化以及销毁的几种使用方法,没有查阅的可以点击:三分钟了解spring-bean生命周期之初始化和销毁的三种方式
今天给大家介绍第4种方式,基于实现BeanPostProcessor接口的方式,为啥没放在之前文章中一起介绍,是因为实现BeanPostProcessor的方式是bean的统一前置后置处理而不是基于某一个bean,好了,话不多说,直接看代码
定义一个前置后置处理器MyBeanPostProcessor如下:
/**
* 定义一个前置后置处理器
*
* @author zhangqh
* @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;
}
}
配置类中增加配置如下:
@Bean
public MyBeanPostProcessor getMyBeanPostProcessor(){
return new MyBeanPostProcessor();
}
运行测试结果如下:
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
从结果可以看出,不仅自定义的bean-user1被处理了,spring中对应的bean也同样被处理了
下面简单说一下的使用场景:
1,可以解析bean中的一些注解转化为需要的属性
2,注入处理一些统一的属性,而不用在每个bean中注入
3,甚至可以做一些日志打印时间等
spring中本身也有很多BeanPostProcessor的实现如下图:
注意上图中的标红的实现,@Autowired想必大家都有使用过,其中的原理就是它了,这里暂且不详述,后边会单独文章详细介绍
好了,今天主要介绍了一下BeanPostProcessor的简单使用,下文会详细的写文章介绍spring生命周期以及BeanPostProcessor底层的实现原理,敬请期待...
以上是今天文章的所有内容,欢迎大家吐槽
更多优质文章请关注以下公众号查阅:
转载于:https://blog.51cto.com/4247649/2118350