Spring初始化与销毁顺序案例演示详解

 更新时间:2023年02月07日 16:20:43   作者:tanglin_030907031026  
这篇文章主要介绍了SpringBoot中的Bean的初始化与销毁顺序,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

演示 - 初始化销毁顺序

/*
    初始化和销毁的执行顺序
 */
@SpringBootApplication
public class A07_1 {
    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(A07_1.class, args);
        context.close();
    }
    @Bean(initMethod = "init3")
    public Bean1 bean1() {
        return new Bean1();
    }
    @Bean(destroyMethod = "destroy3")
    public Bean2 bean2() {
        return new Bean2();
    }
}

Bean1

public class Bean1 implements InitializingBean {
    private static final Logger log = LoggerFactory.getLogger(Bean1.class);
    @PostConstruct
    public void init1() {
        log.debug("初始化1");
    }
    @Override
    public void afterPropertiesSet() throws Exception {
        log.debug("初始化2");
    }
    public void init3() {
        log.debug("初始化3");
    }
}

Bean2

public class Bean2 implements DisposableBean {
    private static final Logger log = LoggerFactory.getLogger(Bean2.class);
    @PreDestroy
    public void destroy1() {
        log.debug("销毁1");
    }
    @Override
    public void destroy() throws Exception {
        log.debug("销毁2");
    }
    public void destroy3() {
        log.debug("销毁3");
    }
}

输出结果:

总结:

Spring 提供了多种初始化手段,除了课堂上讲的 @PostConstruct,@Bean(initMethod) 之外,还可以实现 InitializingBean 接口来进行初始化,如果同一个 bean 用了以上手段声明了 3 个初始化方法,那么它们的执行顺序是

  • @PostConstruct 标注的初始化方法
  • InitializingBean 接口的初始化方法
  • @Bean(initMethod) 指定的初始化方法

与初始化类似,Spring 也提供了多种销毁手段,执行顺序为

  • @PreDestroy 标注的销毁方法
  • DisposableBean 接口的销毁方法
  • @Bean(destroyMethod) 指定的销毁方法

到此这篇关于Spring初始化与销毁顺序案例演示详解的文章就介绍到这了,更多相关Spring初始化与销毁顺序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring 注入静态对象使用三种方式示例

    Spring 注入静态对象使用三种方式示例

    这篇文章主要为大家介绍了Spring注入静态对象使用的三种方式示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-07-07
  • Spring Boot ActiveMQ发布/订阅消息模式原理解析

    Spring Boot ActiveMQ发布/订阅消息模式原理解析

    这篇文章主要介绍了Spring Boot ActiveMQ发布/订阅消息模式原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • springboot断言异常封装与统一异常处理实现代码

    springboot断言异常封装与统一异常处理实现代码

    异常处理其实一直都是项目开发中的大头,但关注异常处理的人一直都特别少,下面这篇文章主要给大家介绍了关于springboot断言异常封装与统一异常处理的相关资料,需要的朋友可以参考下
    2023-01-01
  • 一篇文章带你了解Java容器,面板及四大布局管理器应用

    一篇文章带你了解Java容器,面板及四大布局管理器应用

    这篇文章主要介绍了JAVA布局管理器与面板组合代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2021-08-08
  • Spring中的@ComponentScan注解详解

    Spring中的@ComponentScan注解详解

    这篇文章主要介绍了Spring中的@ComponentScan注解详解,ComponentScan做的事情就是告诉Spring从哪里找到bean,由你来定义哪些包需要被扫描,一旦你指定了,Spring将会在被指定的包及其下级包中寻找bean,需要的朋友可以参考下
    2024-01-01
  • java中url汉字编码互相转换实例

    java中url汉字编码互相转换实例

    这篇文章介绍了java中url汉字编码互相转换实例,有需要的朋友可以参考一下
    2013-10-10
  • Java线程池的四种拒绝策略详解

    Java线程池的四种拒绝策略详解

    jdk1.5 版本新增了JUC并发编程包,极大的简化了传统的多线程开发,下面这篇文章主要介绍了Java线程池的四种拒绝策略的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-04-04
  • Java通过百度API实现图片车牌号识别

    Java通过百度API实现图片车牌号识别

    这段时间做项目需要用java程序进行车牌识别,因此尝试做了下这个程序,本代码功能是通过调用百度API实现的,感兴趣的可以了解一下
    2021-06-06
  • SpringBoot项目中接口防刷的完整代码

    SpringBoot项目中接口防刷的完整代码

    本文通过实例代码给大家介绍了SpringBoot项目中接口防刷的方法,代码简单易懂,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-07-07
  • Mybatis单个参数的if判断报异常There is no getter for property named ''xxx'' in ''class java.lang.Integer''的解决方案

    Mybatis单个参数的if判断报异常There is no getter for property named ''x

    今天小编就为大家分享一篇关于Mybatis单个参数的if判断报异常There is no getter for property named 'xxx' in 'class java.lang.Integer'的解决方案,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论