1. 生命周期
创建 -> init -> destroy
2. 定义生命周期的方法
- @Bean指定init-method和destroy-method
- 实现InitializingBean和DisposableBean接口
- 使用JSR250里面定义的注解:@PostConstruct(标注在方法上的,对象创建并赋值之后调用);@PreDestroy(bean销毁之前调用)
- 使用BeanPostProcessor,实现接口里的方法;(工作在初始化前后)
3. 实例
- @Bean 里面的initMethod 和destroyMethod
@Configuration
public class MyBeanLifeCycle {
@Scope(scopeName = "singleton")
@Bean(name = "car", initMethod = "init", destroyMethod = "destroy")
public Car getCar() {
return new Car();
}
}
2.InitializingBean和DisposableBean接口
public class Person implements InitializingBean, DisposableBean {
public Person() {
System.out.println("person constructor");
}
@Override
public void destroy() throws Exception {
System.out.println("person destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("person init");
}
}
- @PostConstruct和@PreDestroy注解
public class Student {
public Student() {
System.out.println("student constructor");
}
@PostConstruct
public void init() {
System.out.println("student init");
}
@PreDestroy
public void destroy() {
System.out.println("student destroy");
}
- 使用BeanPostProcessor. (为所有的bean初始化前后,添加处理方法)
public class BeanProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessBeforeInitialization ===>" + beanName);
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("postProcessAfterInitialization ===>" + beanName);
return bean;
}
}
Note: 当定义的bean是单例时,当容器关闭时,相应的bean也会自动销毁;如果bean是prototype时,bean不会自动销毁。











网友评论