前言
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属性作为统一的配置。