1: 什么是 bean 的生命周期
bean 的创建----->初始化----->销毁方法 由容器管理 Bean 的生命周期,我们可以通过自己指定 bean 的初始化方法和 bean 的销毁方法
@Configuration public class MainConfig {
//指定了 bean 的生命周期的初始化方法和销毁方法.
@Bean(initMethod = "init",destroyMethod = "destroy")
public Car car() {
return new Car();
}
}
- 针对单实例 bean 的话,容器启动的时候,bean 的对象就创建了,而且容器销毁的时候,也会调用 Bean 的销毁方法。
- 针对多实例 bean 的话,容器启动的时候,bean 是不会被创建的而是在获取 bean 的时候被创建,而且 bean 的销毁不受 IOC 容器的管理。
2: 通过 InitializingBean 和 DisposableBean 的二个接口实现
@Component
public class Person implements InitializingBean, DisposableBean {
public Person() {
System.out.println("Person 的构造方法");
}
@Override
public void destroy() throws Exception {
System.out.println("DisposableBean 的 destroy()方法 ");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("InitializingBean 的 afterPropertiesSet 方法");
}
}
3: 通过 JSR250 规范提供的注解@PostConstruct 和@ProDestory 标 注的方法
@Component
public class Book {
public Book() {
System.out.println("book 的构造方法");
}
@PostConstruct
public void init() {
System.out.println("book 的 PostConstruct 标志的方法");
}
@PreDestroy
public void destory() {
System.out.println("book 的 PreDestory 标注的方法");
}
}
4: 通过 Spring 的 BeanPostProcessor 的 bean 的后置处理器会拦截 所有 bean 创建过程
- postProcessBeforeInitialization 在 init 方法之前调用
- postProcessAfterInitialization 在 init 方法之后调用@Component
public class TestBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("TestBeanPostProcessor...postProcessBeforeInitialization:" + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("TestBeanPostProcessor...postProcessAfterInitialization:" + beanName);
return bean;
}
}
BeanPostProcessor 的执行时机
image.png
网友评论