上文跟大家简单介绍了下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底层的实现原理敬请期待...


以上是今天文章的所有内容,欢迎大家吐槽



更多优质文章请关注以下公众号查阅:


640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=1