注入后的行为
Spring
提供了2种方式在Bean
全部属性设置成功后执行的特定行为:
1. 使用init-method
属性。
2. 实现InitializingBean
接口。
如果某个Bean
类实现了InitializingBean
接口,同时指定了init-method
属性,Spring
容器会先调用接口的afterPropertiesSet()
方法,然后调用init-method
指定的方法。
一般不推荐采用第二个方法。
第一个方法在配置文件中使用init-method
属性。
测试类
public class TestId implements BeanNameAware {
private String id;
public void init() {
System.out.println("正在执行初始化方法 init...");
}
@Override
public void setBeanName(String name) {
this.id = name;
}
public void info() {
System.out.println(id);
}
}
配置文件
<bean id="testId" class="Item7x8.TestId" init-method="init"/>
指定Bean
全部属性设置完成后执行该对象的init
方法。
实现InitializingBean
public class TestId implements BeanNameAware, InitializingBean {
private String id;
public void init() {
System.out.println("正在执行初始化方法 init...");
}
@Override
public void setBeanName(String name) {
this.id = name;
}
public void info() {
System.out.println(id);
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("实现 InitializingBean 接口");
}
}
配置文件
<bean id="testId" class="Item7x8.TestId"/>
Bean销毁前的行为
同样销毁Bean
执行特定方法也有2种:
- 使用
destory-method
属性。 - 实现
DisposableBean
接口。
指定destory-method
属性
<bean id="testId" class="Item7x8.TestId" destroy-method="destoryBean"/>
实现DisposableBean
接口
public class TestId implements DisposableBean {
private String id;
public void init() {
System.out.println("正在执行初始化方法 init...");
}
@Override
public void destroy() throws Exception {
System.out.println("TestId Bean Destory");
}
}
如果指定了destory-method
属性,有实现了DisposableBean
接口,Spring
容器会先执行DisposableBean
的destroy()
方法,然后执行destory-method
属性指定的方法。