文章目錄
- Bean的生命周期
- 一、概念
- 二、bean的生命周期
- 三、示範bean的生命周期
- Ⅰ.建立Orders類
- Ⅱ.修改配置檔案
- Ⅲ.編寫測試類
- 四、Bean 的後置處理器,bean 生命周期有七步
- ▶ 示範添加後置處理器效果
- (1)建立類,實作接口 BeanPostProcessor,建立後置處理器
- (2)修改配置檔案
- 五、Bean的生命周期 單例與多例 模式的對比
Bean的生命周期
一、概念
- 簡單的一句話來說bean的生命周期就是從對象建立到對象銷毀的過程。
二、bean的生命周期
(1)通過構造器建立 bean 執行個體(
無參數構造
)
(2)為 bean 的屬性設定值和對其他 bean 引用(
調用 set 方法
)
(3)調用 bean 的初始化的方法(
進行配置初始化的方法
)
(4)bean 可以使用了(
對象擷取
)
(5)當容器關閉時候,調用 bean 的銷毀的方法(
進行配置銷毀的方法
)
三、示範bean的生命周期
Ⅰ.建立Orders類
- 聲明屬性
- 編寫無參構造器
- 編寫set()方法
- 建立初始化方法
- 建立bean銷毀方法
public class Orders {
// 聲明屬性
private String oName;
// 1.無參構造
public Orders() {
System.out.println("第一步:執行無參構造器建立bean執行個體");
}
// 2.set
public void setoName(String oName) {
this.oName = oName;
System.out.println("第二步:調用set方法設定屬性的值");
}
// 3.建立執行的初始化的方法 --- 在xml檔案中配置
public void initMethod() {
System.out.println("第三步:執行初始化的方法");
}
// 5.建立執行的bean銷毀方法
public void destroyMethod() {
System.out.println("第五步:執行銷毀方法");
}
}
Ⅱ.修改配置檔案
- 配置建立bean對象
- 添加
,指定初始化方法init-method屬性
- 添加
,指定銷毀bean的方法destroy-method屬性
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置bean對象 -->
<bean id="oders" class="Bean的生命周期.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="oName" value="電腦"></property>
</bean>
</beans>
Ⅲ.編寫測試類
public class Test {
@org.junit.Test
public void test_orders(){
try {
ApplicationContext context = new ClassPathXmlApplicationContext("Bean的生命周期/bean_Orders.xml");
// 4.擷取bean執行個體對象
Orders orders = context.getBean("orders",Orders.class);
System.out.println("第四步:擷取建立的bean執行個體對象");
// 5.手動銷毀bean執行個體對象
((ClassPathXmlApplicationContext)context).close();
} catch (Exception e){
e.getMessage();
}
}
}
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SNxIzN5ATYmdDN0U2MiVjZyYzXwATO1kDMyEzLchDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
傳回頂部
四、Bean 的後置處理器,bean 生命周期有七步
(1)通過構造器建立 bean 執行個體(
無參數構造
)
(2)為 bean 的屬性設定值和對其他 bean 引用(
調用 set 方法
)
- 把 bean 執行個體傳遞 bean 後置處理器的方法
postProcessBeforeInitialization
(3)調用 bean 的初始化的方法(
進行配置初始化的方法
)
- 把 bean 執行個體傳遞 bean 後置處理器的方法
postProcessAfterInitialization
(4)bean 可以使用了(
對象擷取
)
(5)當容器關閉時候,調用 bean 的銷毀的方法(
進行配置銷毀的方法
)
▶ 示範添加後置處理器效果
(1)建立類,實作接口 BeanPostProcessor,建立後置處理器
public class MyBeanPost implements BeanPostProcessor {
/**
* 初始化之前調用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之前執行的方法");
return bean;
}
/**
* 初始化之後調用
* @param bean
* @param beanName
* @return
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("在初始化之後執行的方法");
return bean;
}
}
(2)修改配置檔案
- 隻需要配置後置處理器類的bean對象即可,因為後置處理器類實作了
實作了後置處理器,那麼後置處理器就會對目前配置檔案中的所有bean都添加後置處理器的處理。BeanPostProcessor接口
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 配置bean對象 -->
<bean id="orders" class="Bean的生命周期.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="oName" value="電腦"></property>
</bean>
<!-- 配置後置處理器 -->
<bean id="myBeanPost" class="Bean的生命周期.Test.MyBeanPost"></bean>
</beans>
五、Bean的生命周期 單例與多例 模式的對比
圖一:
圖二:
圖三:
圖四:
注意:不管後面有沒有建立明确的對象,都會執行配置檔案的方法和屬性,因為以上是預設的單例模式(設定 scope 值是 singleton 時候),;多例模式(設定 scope 值是 prototype 時候),
加載 spring 配置檔案時候就會建立單執行個體對象
,是以兩者的生命周期有所不一樣!
不是在加載 spring 配置檔案時候建立 對象,而是在調用getBean方法時候建立多執行個體對象
- 取值有三個
default ,true ,false
- 定義:
- 當容器建立時就将對象也一起建立,就是非懶加載
- 當我們需要使用改對象才加載的時候,就是懶加載
- 優點:節省資源
- 缺點:bug不容易暴露,需要到使用的時候才會發現要使用的類有問題
- 單例模式預設非懶加載
- 多例模式為懶加載