一牵敷、Spring的初始化和銷毀方法的3中方式
1榕订、JSR250中@PostConstruct、@PreDestroy注解方式
2沈矿、實現(xiàn)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的構(gòu)造方法執(zhí)行");
}
//銷毀方法
@Override
public void destroy() throws Exception {
System.out.println("8向瓷、實現(xiàn)DisposableBean接口的destroy方法執(zhí)行忍宋。");
}
//初始化方法
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("4、實現(xiàn)InitializingBean接口的afterPropertiesSet方法執(zhí)行风罩。");
}
public void init () {
System.out.println("5、Car配置類@Bean中注冊的init方法執(zhí)行");
}
public void destroy2 () {
System.out.println("9舵稠、Car中注冊的destroy方法執(zhí)行");
}
@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)測試輸出結(jié)果
image.png
(4)總結(jié)
(1)Car的構(gòu)造方法執(zhí)行
(2)實現(xiàn)BeanPostProcessor接口postProcessBeforeInitialization方法執(zhí)行
(3)Car中JSR250定義的@PostConstruct注解標記的init方法執(zhí)行
(4)實現(xiàn)InitializingBean接口的afterPropertiesSet方法執(zhí)行
(5)@Bean注解中注冊的init方法執(zhí)行
(6)Car---postProcessAfterInitialization.
(7)Car中JSR250定義的@PreDestroy注解標記的destroy方法
(8)實現(xiàn)DisposableBean接口的destroy方法執(zhí)行哺徊。
(9)@Bean注解中注冊的destroy方法執(zhí)行優(yōu)先級:
JSR250 > Spring接口方法 > @Bean中注冊的初始化和銷毀方法