Spring中@DependsOn注解的使用代码实例

 更新时间:2024年01月26日 08:55:21   作者:韩_师兄  
这篇文章主要介绍了Spring中@DependsOn注解的使用代码实例,Spring中@DependsOn,主要是使用在类和方法上, 作用是当前对象要依赖另外一些对象,被依赖的对象会先注册到Spring的IOC容器中,需要的朋友可以参考下

@DependsOn的简介

/**
 * Beans on which the current bean depends. Any beans specified are guaranteed to be
 * created by the container before this bean. Used infrequently in cases where a bean
 * does not explicitly depend on another through properties or constructor arguments,
 * but rather depends on the side effects of another bean's initialization.
 *
 * <p>A depends-on declaration can specify both an initialization-time dependency and,
 * in the case of singleton beans only, a corresponding destruction-time dependency.
 * Dependent beans that define a depends-on relationship with a given bean are destroyed
 * first, prior to the given bean itself being destroyed. Thus, a depends-on declaration
 * can also control shutdown order.
 *
 * <p>May be used on any class directly or indirectly annotated with
 * {@link org.springframework.stereotype.Component} or on methods annotated
 * with {@link Bean}.
 *
 * <p>Using {@link DependsOn} at the class level has no effect unless component-scanning
 * is being used. If a {@link DependsOn}-annotated class is declared via XML,
 * {@link DependsOn} annotation metadata is ignored, and
 * {@code <bean depends-on="..."/>} is respected instead.
 *
 * @author Juergen Hoeller
 * @since 3.0
 */
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface DependsOn {
	String[] value() default {};
}

说明

  • 使用范围. 注解可以使用在类上,方法上. 在类上,一般与@Component注解使用 ; 在方法上, 通常会与@Bean注解使用.
  • 注解中的字段是一个数组value, 填充的是bean对象,可以放置多个bean, 填入的bean会比使用该注解的对象早一点注册到容器中.

使用场景

在一些场景, 需要去监听事件源的触发,从而处理相应的业务. 那么就需要监听类比事件源先注册到容器中, 因为事件源触发前,监听就应该存在,否则就不满足使用场景的要求.

@DependsOn的使用

案例1

1 准备一个SpringBoot环境

2 添加监听类和事件源类

@Component
public class ASource {
    public ASource(){
        System.out.println("事件创建");
    }
}
@Component
public class BListener {
    public BListener(){
        System.out.println("监听创建");
    }
}

3 启动项目,查看控制台

// 事件创建
// 监听创建

上面明显,不符合实际使用要求.

4 改造事件源类

@Component
@DependsOn(value = {"BListener"})
public class ASource {
    public ASource(){
        System.out.println("事件创建");
    }
}

5 启动项目,查看控制台

// 监听创建
// 事件创建

上述输出,满足使用要求.

案例2

1 添加配置类

@Configuration
public class Config {
    @Bean
    @DependsOn(value = {"BListener"})
    public ASource aSource(){
        return new ASource();
    }
    @Bean
    public BListener bListener(){
        return new BListener();
    }
}

2 启动项目,查看控制台

// 监听创建
// 事件创建

满足使用要求.

到此这篇关于Spring中@DependsOn注解的使用代码实例的文章就介绍到这了,更多相关@DependsOn注解内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring boot 整合RabbitMQ实现通过RabbitMQ进行项目的连接

    Spring boot 整合RabbitMQ实现通过RabbitMQ进行项目的连接

    RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,这篇文章主要介绍了Spring boot 整合RabbitMQ实现通过RabbitMQ进行项目的连接,需要的朋友可以参考下
    2022-10-10
  • synchronized及JUC显式locks 使用原理解析

    synchronized及JUC显式locks 使用原理解析

    这篇文章主要为大家介绍了synchronized及JUC显式locks 使用原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • JAVA实现深拷贝的几种方式代码

    JAVA实现深拷贝的几种方式代码

    这篇文章主要给大家介绍了关于JAVA实现深拷贝的几种方式,在Java中深拷贝和浅拷贝是用来复制对象的两种不同方式,深拷贝会对所有数据类型进行拷贝,包括对象所包含的内部对象,需要的朋友可以参考下
    2023-09-09
  • Java获取mac地址的方法

    Java获取mac地址的方法

    这篇文章主要介绍了Java获取mac地址的方法,涉及java针对系统硬件及IO操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 解决springboot遇到autowire注入为null的问题

    解决springboot遇到autowire注入为null的问题

    这篇文章主要介绍了解决springboot遇到autowire注入为null的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Java责任链设计模式实例分析

    Java责任链设计模式实例分析

    这篇文章主要介绍了Java责任链设计模式,结合实例形式详细分析了Java责任链设计模式的原理与相关操作技巧,需要的朋友可以参考下
    2019-07-07
  • Pattern.compile函数提取字符串中指定的字符(推荐)

    Pattern.compile函数提取字符串中指定的字符(推荐)

    这篇文章主要介绍了Pattern.compile函数提取字符串中指定的字符,使用的是Java中的Pattern.compile函数来实现对指定字符串的截取,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Java中实现线程间通信的实例教程

    Java中实现线程间通信的实例教程

    线程通信的目标是使线程间能够互相发送信号,另一方面线程通信使线程能够等待其他线程的信号,这篇文章主要给大家介绍了关于Java中实现线程间通信的相关资料,本文通过示例代码介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • spring boot 实现Minio分片上传的步骤

    spring boot 实现Minio分片上传的步骤

    分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件,本文给大家介绍spring boot 实现Minio分片上传的步骤,感兴趣的朋友跟随小编一起看看吧
    2023-10-10
  • Java 虚拟线程的创建与使用深度解析

    Java 虚拟线程的创建与使用深度解析

    虚拟线程是Java 19中以预览特性形式引入,Java 21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧
    2025-09-09

最新评论