三种方式
init和destroy
XML配置中,bean
标签,init-method
用来指定bean初始化后调用的方法,destroy-method
用来指定bean销毁前调用的方法。如果想统一设置,可以在beans
中设置default-init-method
属性。
注解中,@Bean
注解,initMethod用来指定bean初始化后调用的方法,destroyMethod
用来指定bean销毁前调用的方法。
InitializingBean和DisposableBean
org.springframework.beans.factory.InitializingBean接口,在其他初始化工作完成后,才开始调用他的afterPropertiesSet()
方法.
org.springframework.beans.factory.DisposableBean接口,在容器销毁时,会调用destroy()
这个方法。
@PostConstruct和@PreDestroy
@PostConstruct和@PreDestroy不属于spring,而是属于JSR-250规则,日常用的较多的,还是这两个注解。
三种方式执行顺序
当这三种生命周期机制同时作用于同一个bean时,执行顺序如下:
初始化:@PostConstruct > InitializingBean的afterPropertiesSet()方法 > init()方法。
销毁:@PreDestroy > DisposableBean的destroy()方法 > destroy()方法。
示例
MyBean
public class MyBean implements InitializingBean, DisposableBean {
private String name;
public MyBean(String name) {
System.out.println("name:" + name);
this.name = name;
}
public void initMethod() {
System.out.println("initMethod");
}
public void destroyMethod() {
System.out.println("destroyMethod");
}
@PostConstruct
public void postConstruct() {
System.out.println("postConstruct");
}
@PreDestroy
public void preDestroy() {
System.out.println("preDestroy");
}
@Override
public void destroy() throws Exception {
System.out.println("destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("afterPropertiesSet");
}
}
MyConfig
@Configuration
public class MyConfig {
@Bean(initMethod = "initMethod", destroyMethod = "destroyMethod")
public MyBean myBean() {
return new MyBean("张三");
}
}
测试代码
@Test
public void test() {
ApplicationContext app = new AnnotationConfigApplicationContext(MyConfig.class);
System.out.println("开始销毁");
((AnnotationConfigApplicationContext) app).close();
}
运行结果如下
XML的配置同@bean注解,这边不做演示。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。