一、Spring的初始化和销毁方法的3中方式
1、JSR250中@PostConstruct、@PreDestroy注解方式
2、实现Spring中提供的InitializingBean, DisposableBean接口方法
3、通过配置文件或注解方式注册初始化和销毁方法
二、代码测试
(1)主配置类代码
@Configuration
@ComponentScan(value = {"condition"})
public class SpringMainConfig {
@Bean(initMethod = "init",destroyMethod = "destroy2")
public Car car() {
return new Car();
}
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = ContextUtil.getContext();
Car car = (Car) ctx.getBean("car");
ctx.close();
}
}
(2)Car实例代码
public class Car implements InitializingBean, DisposableBean {
private float price;
public Car () {
System.out.println("1、Car的构造方法执行");
}
//销毁方法
@Override
public void destroy() throws Exception {
System.out.println("8、实现DisposableBean接口的destroy方法执行。");
}
//初始化方法
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("4、实现InitializingBean接口的afterPropertiesSet方法执行。");
}
public void init () {
System.out.println("5、Car配置类@Bean中注册的init方法执行");
}
public void destroy2 () {
System.out.println("9、Car中注册的destroy方法执行");
}
@PostConstruct
public void init2 () {
System.out.println("3、Car中JSR250中@PostConstruct注解标记的init方法");
}
@PreDestroy
public void destroy3 () {
System.out.println("7、Car中JSR250中@PreDestroy注解标记的destroy方法");
}
}
(3)测试输出结果
(4)总结
(1)Car的构造方法执行
(2)实现BeanPostProcessor接口postProcessBeforeInitialization方法执行
(3)Car中JSR250定义的@PostConstruct注解标记的init方法执行
(4)实现InitializingBean接口的afterPropertiesSet方法执行
(5)@Bean注解中注册的init方法执行
(6)Car---postProcessAfterInitialization.
(7)Car中JSR250定义的@PreDestroy注解标记的destroy方法
(8)实现DisposableBean接口的destroy方法执行。
(9)@Bean注解中注册的destroy方法执行优先级:
JSR250 > Spring接口方法 > @Bean中注册的初始化和销毁方法