在上一篇文章《Spring框架Bean生命周期的5个阶段及举例说明》中提到:Spring IoC容器管理Bean的生命周期,允许开发者在不同的生命周期阶段插入自定义的处理逻辑。
现在,我们要在Bean的不同的生命周期阶段插入自定义的处理逻辑,怎么插入呢?
Spring框架提供了两种类型的接口供我们实现,一类是直接应用在具体某个bean上的,一类是针对项目中全部bean的接口。
一、需要具体bean实现的接口
1、InitializingBean 接口
InitializingBean根据字面意思可以理解为正在初始化的Bean,提供可重写的初始化方法。
它定义了一个方法:
void afterPropertiesSet()
该方法在容器完成属性注入后会自动调用。
属性注入是Bean生命周期的第二个阶段。
2、DisposableBean 接口
DisposableBean接口的作用是提供可重写的销毁方法。
它定义了一个方法:
void destroy()
该方法在容器销毁 Bean 时会自动调用。执行自定义的销毁逻辑在Bean生命周期的第5个阶段。
除了实现接口,还可以使用 @PostConstruct 和 @PreDestroy 注解来定义初始化和销毁方法。
二、针对全部bean的实现接口
1、BeanFactoryPostProcessor 接口
BeanFactoryPostProcessor接口的作用是允许客户在实例化之前修改bean的描述对象BeanDefinition。
它提供了一个方法:
void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)
该方法在Bean生命周期之前调用。
2、InstantiationAwareBeanPostProcessor
InstantiationAwareBeanPostProcessor类名中有个单词Instantiation是实例化的意思,作用是提供在实例化时的执行方法。
它提供了三个方法:
Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName)
该方法在实例化 Bean 之前调用。
boolean postProcessAfterInstantiation(Object bean, String beanName)
该方法在实例化 Bean 之后调用。
PropertyValues postProcessProp