Spring Bean的生命週期之我的理解(五)------InitializingBean
阿新 • • 發佈:2019-01-22
前言
Spring Bean建立後,提供了針對於Bean的兩種初始化方式:
- 實現InitializingBean介面;
- 設定init-method屬性;
本文介紹的是實現InitializingBean介面的方式;
實現
1.定義MyInitializingBean
package com.silence.ioc.initializing;
import org.springframework.beans.factory.InitializingBean;
public class MyInitializingBean implements InitializingBean {
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Initializing Bean!");
}
}
2.定義Bean
package com.silence.ioc.ac;
import com.silence.ioc.initializing.MyInitializingBean;
public class ApplicationContextTest extends MyInitializingBean {
public void getMessage() {
System.out.println("Hello Application Context!");
}
public void init() {
System.out.println("Init Method!");
}
public void destroy() {
System.out.println("Destroy Method!");
}
}
3.定義配置
命名為spring-context.xml。
<?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-4.0.xsd">
<bean id="ac" class="com.silence.ioc.ac.ApplicationContextTest" init-method="init" destroy-method="destroy"></bean>
</beans>
4.定義容器類
package com.silence.ioc.ac;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class ApplicationContextContainer {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-context.xml");
ApplicationContextTest applicationContextTest = (ApplicationContextTest) applicationContext.getBean("ac");
applicationContextTest.getMessage();
}
}
5.列印結果
Initializing Bean!
Init Method!
由此可以看出同樣是Bean初始化的方式,但是優先後順序,為何順序為先InitializingBean後InitMethod,可以從Spring Bean的生命週期之我的理解(四)——AbstractAutowireCapableBeanFactory(invokeInitMethods)中找到答案。
附錄
如果有太多的Bean擁有初始化或銷燬方法,可以在<\Beans>標籤上面通過配置default-init-method和default-destroy-method屬性作為統一的配置。