Spring 容器可以管理 singleton 作用域 Bean 的生命周期,容器能夠跟蹤 Bean 實例的創建、銷毀。管理 Bean 生命周期行為主要有兩個時機: 注入 Bean 的依賴關系之后 即將銷毀 Bean 之間
依賴關系注入之后的行為有三種方式可以在 Bean 的所有屬性設置成功后執行特定的行為: 實現 org.springframework.beans.factory.InitializingBean 接口 使用 init-method 屬性 使用 @PostConstruct 注解
實現 InitializingBean 接口的示例Bean 的定義:
public class ExampleBean implements InitializingBean { private String field1; private String field2; public void setField1(String field1) { this.field1 = field1; System.out.println("field1 was set."); } public void setField2(String field2) { this.field1 = field2; System.out.println("field2 was set."); } public ExampleBean() { System.out.println("In ExampleBean Constructor."); } public void afterPropertiesSet() throws Exception { System.out.println("All properties were set."); } }Spring 配置:
<bean id="eb" class="com.huey.dream.bean.ExampleBean"> <property name="field1" value=""/> <property name="field2" value=""/></bean>
測試方法:
@Testpublic void testLifecycle() throws Exception { applicationContext appCtx = new ClassPathxmlApplicationContext("applicationContext.xml");}結果輸出:
In ExampleBean Constructor.field1 was set.field2 was set.All properties were set.使用 init-method 屬性的示例
Bean 的定義:
public class ExampleBean { private String field1; private String field2; public void setField1(String field1) { this.field1 = field1; System.out.println("field1 was set."); } public void setField2(String field2) { this.field1 = field2; System.out.println("field2 was set."); } public ExampleBean() { System.out.println("In ExampleBean Constructor."); } public void init() throws Exception { System.out.println("In init method."); } }Spring 配置:
<bean id="eb" class="com.huey.dream.bean.ExampleBean" init-method="init"> <property name="field1" value=""/> <property name="field2" value=""/></bean>使用 @PostConstruct 注解
Bean 的定義:
public class ExampleBean { private String field1; private String field2; public void setField1(String field1) { this.field1 = field1; System.out.println("field1 was set."); } public void setField2(String field2) { this.field1 = field2; System.out.println("field2 was set."); } public ExampleBean() { System.out.println("In ExampleBean Constructor."); } @PostConstruct public void init() throws Exception { System.out.println("In init method."); } }Spring 配置:
<bean id="eb" class="com.huey.dream.bean.ExampleBean"> <property name="field1" value=""/> <property name="field2" value=""/></bean>Bean 銷毀之前的行為
與定制初始化行為類似,也有三種方式可以在 Bean 實例銷毀前執行特定的行為: 實現 org.springframework.beans.factory.DisposableBean 接口 使用 destroy-method 屬性 使用 @PreDestroy 注解
新聞熱點
疑難解答