1.实现方式
- 通过实现InitializingBean/DisposableBean 接口来定制初始化之后/销毁之前的操作方法。
- 通过 元素的 init-method/destroy-method属性指定初始化之后 /销毁之前调用的操作方法;
- 在方法上加上@PostConstruct或@PreDestroy注解来实现该方法是在初始化之后还是销毁之前调用。
2.代码实现
package com.tansen.shop.test;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 测试spring容器中,bean的生命周期
* @author tansen
* @version 2017年12月14日上午10:47:27
*/
public class TestSpringLifeCycle implements InitializingBean,DisposableBean{
@Override
public void destroy() throws Exception {
System.out.println("实现DisposableBean接口的销毁...");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("实现InitializingBean在初始化之前...");
}
public TestSpringLifeCycle() {
System.out.println("TestSpringLifeCycle调用构造方法...");
}
@PostConstruct
private void postConstruct() {
System.out.println("@PostConstruct注解方式初始化...");
}
@PreDestroy
private void preDestroy() {
System.out.println("@PreDestroy注解方式销毁...");
}
public void initMethod() {
System.out.println("配置xml方式初始化...");
}
public void destroyMethod() {
System.out.println("配置xml方式销毁...");
}
public static void main(String[] args) {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-test.xml");
context.close();
}
}
3.最终结果
构造方法—>@PostConstruct注解方式—>实现InitializingBean初始化—>配置spring.xml方式初始化
@PreDestroy注解方式销毁—>实现DisposableBean接口的销毁—>配置spring.xml方式销毁
[INFO ] 2017-12-14 10:38:08 AbstractApplicationContext@(AbstractApplicationContext.java:512):Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@4038202: startup date [Thu Dec 14 10:38:08 CST 2017]; root of context hierarchy
[INFO ] 2017-12-14 10:38:08 XmlBeanDefinitionReader@(XmlBeanDefinitionReader.java:316):Loading XML bean definitions from class path resource [applicationContext-test.xml]
[INFO ] 2017-12-14 10:38:08 DefaultListableBeanFactory@(DefaultListableBeanFactory.java:603):Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4da4826b: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,testSpringLifeCycle,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
TestSpringLifeCycle调用构造方法...
@PostConstruct注解方式初始化...
实现InitializingBean在初始化之前...
配置xml方式初始化...
[INFO ] 2017-12-14 10:38:08 AbstractApplicationContext@(AbstractApplicationContext.java:1044):Closing org.springframework.context.support.ClassPathXmlApplicationContext@4038202: startup date [Thu Dec 14 10:38:08 CST 2017]; root of context hierarchy
[INFO ] 2017-12-14 10:38:08 DefaultSingletonBeanRegistry@(DefaultSingletonBeanRegistry.java:444):Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4da4826b: defining beans [org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,testSpringLifeCycle,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor]; root of factory hierarchy
@PreDestroy注解方式销毁...
实现DisposableBean接口的销毁...
配置xml方式销毁...