- 执行顺序如下
Dog 构造方法
dog BPP postProcessBeforeInitialization 方法
1、Dog PostConstruct注解 方法
2、Dog InitializingBean afterPropertiesSet 方法
3、Dog init 方法
dog BPP postProcessAfterInitialization 方法
4、Dog PreDestroy注解 方法
5、Dog DisposableBean destroy 方法
6、Dog destroy 方法
Dog类如下
public class Dog implements InitializingBean, DisposableBean {
public Dog() {
System.out.println("Dog 构造方法");
}
@PostConstruct
public void postConstruct() {
System.out.println("1、Dog PostConstruct注解 方法");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("2、Dog InitializingBean afterPropertiesSet 方法");
}
public void initM() throws Exception {
System.out.println("3、Dog init 方法");
}
@PreDestroy
public void preDestroy() {
System.out.println("4、Dog PreDestroy注解 方法");
}
@Override
public void destroy() throws Exception {
System.out.println("5、Dog DisposableBean destroy 方法");
}
public void destroyM() throws Exception {
System.out.println("6、Dog destroy 方法");
}
}
MyBeanPostProcessor 如下
@Component
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if(bean instanceof Dog){
System.out.println(beanName+" BPP postProcessBeforeInitialization 方法 ");
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
if(bean instanceof Dog){
System.out.println(beanName+" BPP postProcessAfterInitialization 方法 ");
}
return bean;
}
}
- 配置类如下
@Configuration @ComponentScan public class InitializeConfig { @Bean(initMethod = "initM", destroyMethod = "destroyM") public Dog dog() { return new Dog(); } public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(InitializeConfig.class); // 会执行bean的销毁 context.close(); } }