在Spring容器中Bean的几种初始化、销毁方法的实现和先后顺序

来源:互联网 发布:软件授权码商城 编辑:程序博客网 时间:2024/05/17 22:43

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 hierarchyTestSpringLifeCycle调用构造方法...@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方式销毁...

这里写图片描述

阅读全文
1 0