十、【生命周期】BeanPostProcessor后置处理器
Spring的Bean后置处理器,BeanPostProcessor主要是在类初始化之前,跟之后处理相应的事。
- 实体类
public class Train {
public Train() {
System.out.println("Train构造方法执行。。。。。。");
}
public void init() {
System.out.println("Train的init方法执行。。。。。。");
}
public void destroy() {
System.out.println("Train的destroy方法执行。。。。。。");
}
}
- 配置类
加上对实现类的扫描
@Configuration
@ComponentScan("com.nmys.story.springCore.springioc.beanpostprocessor_")
public class Config01 {
@Bean(initMethod = "init",destroyMethod = "destroy")
public Train train(){
return new Train();
}
}
- BeanPostProcessor的实现类
加上@Component注解,目的为了让spring来管理这个实现类
@Component
public class BeanPostProcessorImpl implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 返回一个传过来的对象
// 在初始化方法调用之前进行后置处理工作
// 什么时候调用?在init-method方法之前就调用了
System.out.println("postProcessBeforeInitialization======" + beanName + "======" + bean);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization======" + beanName + "======" + bean);
return bean;
}
}
- 测试
public class Test01 {
@Test
public void test() {
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(Config01.class);
ac.close();
}
}
- 结果
Train构造方法执行。。。。。。
postProcessBeforeInitialization======train======com.nmys.story.springCore.springioc.beanpostprocessor_.Train@3b69e7d1
Train的init方法执行。。。。。。
postProcessAfterInitialization======train======com.nmys.story.springCore.springioc.beanpostprocessor_.Train@3b69e7d1
Train的destroy方法执行。。。。。。