IOC 容器中 Bean 的生命周期方法:
Spring IOC 容器可以管理Bean 的生命周期
Spring 允許在 Bean 生命周期的特定點(diǎn)執(zhí)行定制的任務(wù)臣咖;
Spring IOC 容器對(duì) Bean 的生命周期進(jìn)行管理的過程:
- 通過構(gòu)造器或工廠方法創(chuàng)建 Bean 實(shí)例躏筏;
- 為 Bean 的屬性設(shè)置值和對(duì)其他 Bean 的應(yīng)用;
- 調(diào)用 Bean 的初始方法唐础;
- Bean 可以使用了星持;
- 當(dāng)關(guān)閉容器時(shí)坛吁,調(diào)用 Bean 的銷毀方法寇损;
在調(diào)用 Bean 的初始化方法前后可執(zhí)行后置處理器前后置方法
在 Bean 的聲明里設(shè)置 init-method
和 destroy=method
屬性,為 Bean 指定初始化和銷毀方法槐沼;
package com.laishuai.pojo;
public class Driver {
private String name;
private int age;
private Car cars;
public void a(){
System.out.println("初始化方法");
}
public void b(){
System.out.println("銷毀方法");
}
...
}
<bean id="driver2" class="com.laishuai.pojo.Driver" init-method="a" destroy-method="b">
<property name="name" value="LaiShuai"></property>
<property name="age" value="21"></property>
<property name="cars" ref="car"></property>
</bean>
Bean 后置處理器
Bean 后置處理器允許在調(diào)用初始化方法前后對(duì) Bean 進(jìn)行額外的處理曙蒸,
Bean 后置處理器對(duì) IOC 容器里的所有 Bean 實(shí)例逐一處理而非單一實(shí)例
,其典型應(yīng)用是:檢查Bean 屬性準(zhǔn)確性或根據(jù)特定的標(biāo)準(zhǔn)更改 Bean 屬性
岗钩;
對(duì) Bean 后置處理器而言纽窟。需要實(shí)現(xiàn)接口: BeanPostProcessor ,在初始化方法被調(diào)用前后兼吓,Spring 將把每個(gè) Bean 實(shí)例分別傳遞給上述接口的一下兩個(gè)方法:
- postProcessBeforeInitialization();
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("前置處理器"+beanName);
return bean;
}
2.postProcessAfterInitialization();
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置處理器"+beanName);
return bean;
}
在 IOC 容器加入后置處理器:
- 自定義一個(gè)后置處理器:實(shí)現(xiàn)BeanPostProcessor接口臂港;
- 重寫B(tài)eanPostProcessor接口的兩個(gè)方法;
- 在 IOC 容器加入處理器的Bean;
<bean id="carBeanPostProsessor"
class="com.laishuai.beans.CarBeanProcessor">
</bean>