Spring系列6:depends-on干预bean创建和销毁顺序

初始化: depends-on 属性可以显式地强制一个或多个 bean 在使用这个元素的 bean 被初始化之前被初始化。

销毁: depends-on 属性指定的那些依赖bean先销毁,使用这个元素的 bean后被销毁,干预了关闭顺序。

结论给完了,我们下面通过案例验证。

public class MyBeanA {
    public void init() {
        System.out.println("MyBeanA 被初始化-----");
    }
    public void destroy() {
        System.out.println("MyBeanA 被销毁-----");
    }
}
public class MyBeanB {
    public void init() {
        System.out.println("MyBeanB 被初始化-----");
    }
    public void destroy() {
        System.out.println("MyBeanB 被销毁-----");
    }
}
public class MyBeanC {
    public void init() {
        System.out.println("MyBeanC 被初始化-----");
    }
    public void destroy() {
        System.out.println("MyBeanC 被销毁-----");
    }
}

package com.crab.spring.ioc.demo04;

/**
 * @author zfd
 * @version v1.0
 * @date 2022/1/13 15:11
 * @关于我 请关注公众号 螃蟹的Java笔记 获取更多技术系列
 */
public class Test {

    @org.junit.Test
    public void test() {
        System.out.println("开始创建容器并初始化bean");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("demo04/spring1.xml");
        System.out.println("开始关闭容器并销毁bean");
        context.close();
    }
}

输出结果

开始创建容器并初始化bean
MyBeanA 被初始化-----
MyBeanB 被初始化-----
MyBeanC 被初始化-----
开始关闭容器并销毁bean
MyBeanC 被销毁-----
MyBeanB 被销毁-----
MyBeanA 被销毁-----

初始化的顺序是bean在配置文件中的配置顺序A-B-C

销毁的顺序与初始化顺序相反C-B-A


    @org.junit.Test
    public void test2() {
        System.out.println("开始创建容器并初始化bean");
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("demo04/spring2.xml");
        System.out.println("开始关闭容器并销毁bean");
        context.close();
    }

运行结果

开始创建容器并初始化bean
MyBeanC 被初始化-----
MyBeanA 被初始化-----
MyBeanB 被初始化-----
开始关闭容器并销毁bean
MyBeanB 被销毁-----
MyBeanA 被销毁-----
MyBeanC 被销毁-----

初始化的顺序:C-A-B,不同地方A依赖于C,所以C先初始化,然后到A,顺序再到B

销毁的顺序:B-A-C,销毁A再销毁C

干预初始化:例如当需要触发类中的静态初始化方法来注册数据库驱动程序时候,是依赖于数据库的配置bean先初始化的。

干预销毁:例如我们的清理类A中在销毁方法中保存进程中某些数据到redis,依赖于 RedisTemplate,则 RedisTemplate必须在A之后销毁。

本文介绍各种介绍了 depends-on对bean的初始化和销毁的影响和实际的应用场景。下一篇介绍自动依赖注入。

知识分享,转载请注明出处。学无先后,达者为先!

Original: https://www.cnblogs.com/kongbubihai/p/15845338.html
Author: kongxubihai
Title: Spring系列6:depends-on干预bean创建和销毁顺序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/572064/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java:http的post请求(带参数json格式)示例代码

    Java:http的post请求(带参数json格式)示例代码: undefined import cn.hutool.core.collection.CollectionUtil…

    Java 2023年5月29日
    068
  • 丰富Bean的配置

    关于Bean是如何配置的,大家并不陌生。毕竟前文曾有涉及,虽然比较粗浅。却也介绍了如何写份XML配置文件,告诉Spring容器怎样创建Bean,怎样注入依赖,等等。其中要点如下:1…

    Java 2023年6月5日
    066
  • 在项目中导入lombok依赖自动生成有参,无参 空参 方法的注解

    导入依赖 org.projectlombok lombok 1.18.22 provided 注解 @Data //生成set get to string方法 @AllArgsCo…

    Java 2023年6月6日
    063
  • java中的代码块(初始化块)

    介绍 代码块又叫初始化块,属于类中的成员,类似于方法,将逻辑语句封装在方法体中,通过{ } 包围起来,但和方法不同,没有方法名,没有返回值,没有参数,只有方法体,而且不通过对象或类…

    Java 2023年6月6日
    0100
  • Java基础学习总结

    写的这个博客是学习B站狂神说的Java教学视频的学习记录,记录了重点知识以及以前易混淆理解的知识点。本博客可能缺少部分基础知识点,适合像我一样学习Java过程中曾经半途而废的学生。…

    Java 2023年6月9日
    081
  • git使用技巧

    1.如果commit了不想提交的内容,如何回滚本地不影响其他 使用 命令 git reset –soft HEAD^ , 可以回退本次commit的内容 , 并保持本地…

    Java 2023年6月15日
    085
  • 教学日志:javaSE-面向对象1

    对象,类,属性,方法的理解 package com.tengxun.class6.oop1; /** * @Auther: Yu Panpan * @Date: 2021/12/7…

    Java 2023年6月5日
    0100
  • Java中的Lock锁

    Lock锁介绍: 在java中可以使用 synchronized 来实现多线程下对象的同步访问,为了获得更加灵活使用场景、高效的性能,java还提供了Lock接口及其实现类Reen…

    Java 2023年5月29日
    078
  • 搭建maven私服

    1.1 简介: Nexus 是Maven仓库管理器,如果你使用Maven,你可以从Maven中央仓库 下载所需要的构件(artifact),但这通常不是一个好的做法,你应该在本地架…

    Java 2023年6月5日
    085
  • javaSE 温故而知新

    重温 javaSE 前言:有地基才能有高楼大厦 重温 javaSE 认识java Java基础 1、数据类型 1.1 基本数据类型: 1.2 引用数据类型 1.3 基本数据类型的包…

    Java 2023年6月16日
    073
  • Java学习 (13)Java流程控制篇(04)break & continue & goto

    break & continue break 语法实例 continue 语法实例 break 与 continue 的差异 goto 练习 参考视频(狂神说Java) b…

    Java 2023年6月8日
    082
  • 避坑手册 | JAVA编码中容易踩坑的十大陷阱

    JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患。此外,这些陷阱也是面试的时候面试官比较喜欢问的问题。 本文对这些陷阱进行了统一的整理,…

    Java 2023年6月7日
    0194
  • Java面试题(八)–Spring

    1 基础知识 1、说说你对Spring的理解? 1、Spring是一个开源框架,主要是为简化企业级应用开发而生。可以实现EJB可以实现的功能,Spring是一个IOC和AOP容器框…

    Java 2023年6月9日
    079
  • SpringCloud架构系统中如何保证集群环境下定时任务同时只有一个实例运行工作?

    问题 首先说下情况,我们平常开发SpringCloud微服务的时候,若要确保高可用,同一服务都会部署多台实例,然后注册到Eureka上。 一般我们会把所有定时任务写到一个服务里,那…

    Java 2023年5月30日
    078
  • Java Class 定义、创建对象、访问属性、及执行过程

    类的定义 class 类名 { String 属性名称;//(也称成员变量、field字段)可以定义多个 int 属性名; char 属性名; int[] 属性名; // 成员变量…

    Java 2023年6月5日
    0145
  • 微服务 mybatis-plus 添加日志输出

    spring配置 spring: redis: database: 6 host: 192.168.8.248 port: 6379 password: datasource: d…

    Java 2023年5月30日
    076
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球