設(shè)置bean生命周期
- 新建一個(gè)類
public class Pojo {
private String name;
public Pojo() {
System.out.println("創(chuàng)建對(duì)象");
}
public void init() {
System.out.println("初始化對(duì)象");
}
public void destroy() {
System.out.println("銷毀方法");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Pojo [name=" + name + "]";
}
}
使用bean標(biāo)簽中的 init-method="對(duì)象方法名" 屬性設(shè)置初始方法
使用bean標(biāo)簽中的 destroy-method="對(duì)象方法名" 屬性設(shè)置銷毀方法
<!-- 設(shè)置生命周期 方法 init-method="對(duì)象方法名" 屬性初始方法
destroy-method="對(duì)象方法名" 屬性銷毀方法
-->
<bean id="pojo" class="pojo.Pojo" init-method="init"
destroy-method="destroy">
<property name="name" value="我是對(duì)象"></property>
</bean>
- spring 會(huì)在創(chuàng)建bean時(shí)調(diào)用 init-method設(shè)置的方法 銷毀bean 調(diào)用 destroy-method 設(shè)置的方法
bean的后置處理器
- 1 后置處理器需要實(shí)現(xiàn) BeanPostProcessor接口
public class MyBeanPostProcessor implements BeanPostProcessor{
@Override
public Object postProcessBeforeInitialization(Object bean, String arg1) throws BeansException {
//調(diào)用init-method前調(diào)用
}
@Override
public Object postProcessAfterInitialization(Object bean, String arg1) throws BeansException {
//調(diào)用 destroy-method 前調(diào)用
return bean;
}
}
- 2 spring容器調(diào)用bean的init初始化方法前調(diào)用處理器的postProcessBeforeInitialization
spring容器調(diào)用bean的destroy銷毀方法前調(diào)用處理器的 postProcessAfterInitialization
- 3 后置處理器會(huì)監(jiān)聽所有的bean
- 4 后置處理器兩個(gè)方法參數(shù) 第一個(gè)bean的對(duì)象 第二個(gè)bean配置的id
- 5 返回值是實(shí)際返回給用戶對(duì)象
<bean id="MyBeanPostProcessor" class="pojo.MyBeanPostProcessor" ></bean>