Spring IoC容器的本質是管理Bean,對於Bean而言在容器中有其存在的生命週期。它的初始化和銷燬也需要一個過程。Bean的生命週期主要了解Spring IoC容器初始化和銷燬Bean的過程。爲了定義安裝和拆卸一個 bean,我們只要聲明帶有 init-method 和/或 destroy-method 參數的 。init-method 屬性指定一個方法,在實例化 bean 時,立即調用該方法。同樣,destroy-method 指定一個方法,只有從容器中移除 bean 之後,才能調用該方法。
Bean的生命週期可以表達爲:Bean的定義——Bean的初始化——Bean的使用——Bean的銷燬
1.1 定義Bean
這是Bean配置文件
<?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 id="HelloWorld" class="com.spring.chapter2.HelloWorld" init-method="init" destroy-method="destroy">
<property name="say" value="世界你好"></property>
</bean>
</beans>
1.2下面是HelloWorld.java的定義:
1 package com.spring.chapter2;
2
3 public class HelloWorld {
4
5
6 public String getSay() {
7 return say;
8 }
9 public void setSay(String say) {
10 this.say = say;
11 }
12 private String say;
13
14
15 public void init(){
16 System.out.println(say+"Bean 開始初始化...");
17
18 }
19 public void destroy(){
20 System.out.println(say+"Bean 開始銷燬...");
21 }
22
23 }
2.1 下面是 Main.java 文件的內容。
1 public static void main(String[] args) {
2
3 AbstractApplicationContext applicationContext=newClassPathXmlApplicationContext("spring_xml/spring.xml");
4 HelloWorld helloWorld=(HelloWorld)applicationContext.getBean("HelloWorld");
5 System.out.println(helloWorld.getSay());
6 applicationContext.registerShutdownHook(); //AbstractApplicationContext 類中聲明的關閉 hook 的 registerShutdownHook()方法。它將確保正常關閉,並且調用相關的 destroy 方法。
7 }
2.2測試結果
默認的初始化和銷燬方法
如果你有太多具有相同名稱的初始化或者銷燬方法的 Bean,那麼你不需要在每一個 bean 上聲明初始化方法和銷燬方法。框架使用 元素中的 default-init-method 和 default-destroy-method 屬性提供了靈活地配置這種情況,如下所示:
1 <beans xmlns="http://www.springframework.org/schema/beans"
2 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://www.springframework.org/schema/beans
4 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"
5 default-init-method="init"
6 default-destroy-method="destroy">
7
8 <bean id="..." class="...">
9 ...
10 </bean>
11
12 </beans>