生命周期 04 BeanPostProcessor 后置处理器
BeanPostProcessor是一个接口:bean的后置处理器
在bean初始化前后进行一些处理工作
postProcessBeforeInitialization:初始化之前调用
postProcessAfterInitialization:初始化之后调用
自定义后置处理器
package com.example.annotations.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
/**
* 测试 BeanPostProcessor(后置处理器)
* 初始化前后进行处理工作
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* 初始化之前调用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization === " + beanName +" => " + bean );
return bean;
}
/**
* 初始化之后调用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization === " + beanName +" => " + bean );
return bean;
}
}
配置类
@Import(MyBeanPostProcessor.class) :
- 将MyBeanPostProcessor纳入到容器中;
- 这样该容器中的所有bean在初始化前后都会执行该后置处理器中的逻辑,即使未定义初始化方法这些逻辑也会执行的
@Configuration
@Import(MyBeanPostProcessor.class) //将MyBeanPostProcessor纳入到容器中;这样该容器中的所有bean在初始化前后都会执行该后置处理器中的逻辑,即使未定义初始化方法这些逻辑也会执行的
public class MainConfigOfLifeCycle {
@Bean(value = "dog4LifeCycle",initMethod = "init",destroyMethod = "destroyMethod")
public Dog dog(){
return new Dog();
}
}
测试
@Test
void lifeCycleTest(){
//配置类测试
AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfigOfLifeCycle.class);
System.out.println("容器创建完毕");
//关闭容器
applicationContext.close();
System.out.println("容器已关闭");
}
运行结果