首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spring @DependsOn使用类而不是bean名称

Spring @DependsOn注解用于指定bean之间的依赖关系。它可以确保在当前bean初始化之前,指定的依赖bean已经被完全初始化。

@DependsOn注解可以应用于类级别,用于指定当前类依赖的其他类。它接受一个字符串数组作为参数,数组中的每个元素都是一个被依赖的类的全限定名。

使用@DependsOn注解可以解决以下问题:

  1. 控制bean初始化顺序:当存在多个bean之间的依赖关系时,可以使用@DependsOn注解确保它们按照指定的顺序进行初始化。
  2. 解决循环依赖:当存在循环依赖时,可以使用@DependsOn注解指定依赖关系,从而解决循环依赖的问题。

@DependsOn注解的应用场景包括但不限于:

  1. 在使用Spring的IoC容器时,当存在多个bean之间的依赖关系,且需要控制它们的初始化顺序时,可以使用@DependsOn注解。
  2. 在解决循环依赖问题时,可以使用@DependsOn注解指定依赖关系。

腾讯云提供了一系列与Spring相关的产品和服务,其中包括:

  1. 云服务器CVM:提供可扩展的计算能力,用于部署和运行Spring应用程序。产品介绍链接:https://cloud.tencent.com/product/cvm
  2. 云数据库MySQL:提供高性能、可扩展的MySQL数据库服务,适用于存储Spring应用程序的数据。产品介绍链接:https://cloud.tencent.com/product/cdb_mysql
  3. 云函数SCF:提供事件驱动的无服务器计算服务,可用于构建和运行无状态的Spring微服务。产品介绍链接:https://cloud.tencent.com/product/scf
  4. 云监控CM:提供全面的监控和管理能力,可用于监控Spring应用程序的性能和可用性。产品介绍链接:https://cloud.tencent.com/product/cm

请注意,以上仅为腾讯云提供的一些与Spring相关的产品和服务示例,其他云计算品牌商也提供类似的产品和服务。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【小家Spring】控制Spring IoC容器对Bean(含@Configuration配置)的加载顺序(@DependsOn注解的使用

都是自动的,不是我们手动传值的) 相关注解有:@AutoConfigureAfter、@AutoConfigureBefore、@AutoconfigureOrder等等 Spring容器载入bean...不写不会生效,但是若写了,名字要写正确,否则会报错的 @DependsOn({"helloController"}) // 名称必须写对,必须是容器里存在的Bean,否则启动报错的(fast-fail是好事...这种方式不建议使用在这种DependsOn的场景,因为它不是为了这个而生的。...String[] value() default {}; } @DependsOn 用于@Bean注解上的使用 由于使用方式很简单,因此略过~ @Configuration配置顺序控制 @Configuration...配置也是容器里面一个特殊的Bean,因为它不需要完成业务功能,因此它 纯Spring环境 由于在纯Spring环境下,Config配置都是由我们手动指定传进去的,所以Spring并没有再对它进行排序处理

2.7K20

Spring核心技术》第7章:深度解析@DependsOn注解

Spring在创建当前Bean之前,会先创建由@DependsOn注解指定的依赖Bean,在Spring使用@DependsOn注解的场景通常会有以下几种场景: (1)在某些情况下,Bean不是通过属性或构造函数参数显式依赖于另一个...3.1 标注到上的案例 本节,主要使用@DependsOn注解标注到上来实现Spring创建Bean的依赖顺序案例,具体实现步骤如下所示。...@Component注解标注,并且指定了Bean名称为dependsOnClassA,以及使用@DependsOn注解指定了依赖的Bean名称为dependsOnClassB。...注解标注到上时,Spring在创建标注了@DependsOn注解的Bean对象之前,会先创建使用@DependsOn注解指定的Bean对象。...,使用@DependsOn注解依赖了名称为dependsOnMethodB的Bean对象。

78420

Spring解析,加载及实例化Bean的顺序(零配置)

使用Spring时,Bean之间会有些依赖,比如一个Bean A实例化时需要用到Bean B,那么B应该在A之前实例化好。...很多时候Spring智能地为我们做好了这些工作,但某些情况下可能不是,比如Springboot的@AutoConfigureAfter注解,手动的指定Bean的实例化顺序。...了解SpringBean的解析,加载和实例化顺序机制有助于我们更好的使用Spring/Springboot,避免手动的去干预Bean的加载过程,搭建更优雅的框架。...在这个过程中,如果BeanDefinition的DependsOn不为空,从字面理解就是依赖某个什么,其值一般是某个或多个beanName,也就是说依赖于其他Bean,此时Spring会将DependsOn...指定的这些名称Bean先实例化,也就是先调用getBean(dependsOn)方法。

3.2K20

spring:我是如何解决循环依赖的?

说白了,两次从三级缓存中获取都是ObjectFactory对象,通过它创建的实例对象每次可能都不一样的。 这样不是有问题? 为了解决这个问题,spring引入的第二级缓存。...标红的地方明显能够看出:非抽象、单例 并且非懒加载的才能被提前初始bean多例即SCOPE_PROTOTYPE类型的,非单例,不会被提前初始化bean,所以程序能够正常启动。...所以TestService1比TestService2先加载,改了文件名称之后,TestService2比TestService6先加载。...DependsOn循环依赖 还有一种有些特殊的场景,比如我们需要在实例化Bean A之前,先实例化Bean B,这个时候就可以使用@DependsOn注解。...生成代理对象产生的循环依赖 这类循环依赖问题解决方法很多,主要有: 使用@Lazy注解,延迟加载 使用@DependsOn注解,指定加载先后关系 修改文件名称,改变循环依赖的加载顺序 使用@DependsOn

16.6K105

Spring Ioc 之 Bean的加载(二)

在上篇文章中Spring Ioc 之 Bean的加载(一),我们分析了Spring Ioc中Bean的加载 doGetBean() 方法的2.2从缓存中获取单例bean和2.3获取最终的bean实例对象两个步骤...depends on. // 处理所依赖的 bean @DependsOn() // 获取当前Bean所有依赖Bean名称 String[] dependsOn = mbd.getDependsOn...//解析指定Bean名称的原始名称 String nameToLookup = originalBeanName(name); // 若为 AbstractBeanFactory 类型,委托父处理...bean @DependsOn() //获取当前Bean所有依赖Bean名称 String[] dependsOn = mbd.getDependsOn(); //如果有依赖 if (...在spring中有一个@DependsOn注解,它的作用是依赖加载,比如A对象要在B对象加载之后才能加载,那么可以在A上面加@DependsOn(value = "B")注解,就可以达到我们的要求。

84950

系统学习SpringFramework:循环依赖与三级缓存

说白了,两次从三级缓存中获取都是 ObjectFactory 对象,通过它创建的实例对象每次可能都不一样的。这样不是有问题? 为了解决这个问题,Spring 引入的第二级缓存。...,多例即 SCOPE_PROTOTYPE 类型的,非单例,不会被提前初始化 Bean,所以程序能够正常启动。如何让他提前初始化bean呢?...4、DependsOn 循环依赖 还有一种有些特殊的场景,比如我们需要在实例化 Bean A 之前,先实例化 Bean B,这个时候就可以使用 @DependsOn 注解。...目前包含下面几种情况: 解决方式: 问题 解决方式 生成代理对象产生的循环依赖 ①、 使用 @Lazy 注解,延迟加载 ②、使用 @DependsOn 注解,指定加载先后关系 ③、修改文件名称,改变循环依赖的加载顺序...多例循环依赖 可以通过把 Bean 改成单例的解决 构造器循环依赖 可以通过使用 @Lazy 注解解决 使用 @DependsOn 产生的循环依赖 要找到@DependsOn注解循环依赖的地方,迫使它不循环依赖就可以解决问题

49020

万字长文带你彻底吃透Spring循环依赖,堪称全网最全(文末福利)

其实,从本质上讲,这个异常不是Spring抛出的,而是JVM抛出的栈溢出错误。...4.5 @DependsOn的循环依赖 @DependsOn注解主要用于指定Bean的实例化顺序,Spring默认是不支持基于@DependsOn注解的循环依赖。...这个错误信息本质上不是Spring抛出的,而是JVM抛出的。根本原因其实是出在SpecialCircularBeanA和SpecialCircularBeanB两个的toString()方法上。...也就是说,Spring会在创建单例Bean之前,将正在创建的Bean名称添加到singletonsCurrentlyInCreation集合中。...在Spring使用三级缓存完美解决了解耦、性能、扩展的问题。 (2)创建单例工厂 Spring在创建Bean对象时,会先创建一个和Bean名称相同的单例工厂,并将Bean先放入单例工厂中。

1.4K10

【愚公系列】2023年04月 Java教学课程 132-Spring框架的注解开发

bean的定义 名称:@Component @Controller @Service @Repository 类型:注解 位置:定义上方 作用:设置该类为spring管理的bean 范例: @Component...,不区分方法是否为静态或非静态 @Bean所在的必须被spring扫描加载,否则该注解无法生效 相关属性 value(默认):定义bean的访问id 2.6 bean的非引用类型属性注入 名称...配置与管理 名称:@Import 类型:注解 位置:定义上方 作用:导入第三方bean作为spring控制的资源 范例: @Configuration @Import(OtherClassName.class...导入其他资源(了解) @Bean所在的可以使用导入的形式进入spring容器,无需声明为bean 3.bean加载控制 3.1 依赖加载 (1)@DependsOn 名称:@DependsOn...ClassName { } 说明: 配置在方法上,使@DependsOn指定的bean优先于@Bean配置的bean进行加载 配置在上,使@DependsOn指定的bean优先于当前中所有

38820

想拿月薪4万,99%公司必备的技术,你得先掌握好啊!

参数:value和scopeName效果一样,用来指定bean作用域名称,如:singleton、prototype 常见2种用法 和@Compontent一起使用上 和@Bean一起标注在方法上...value:string类型的数组,用来指定当前bean需要依赖的bean名称,可以确保当前容器在创建被@DependsOn标注的bean之前,先将value指定的多个bean先创建好。...@DependsOn,指定了2个bean:service2和service3,那么spring容器在创建上面这个service1的时候会先将@DependsOn中指定的2个bean先创建好 来个配置...new Service3(); } } 上面是一个spring的配置中3个方法定义了3个bean @1:这个地方使用了@DependsOn,表示service1这个bean创建之前,会先创建好...案例2:和@Configuration一起使用加在配置上 @Lazy和@Configuration一起使用,此时配置中所有通过@Bean方式注册的bean都会被延迟初始化,不过也可以在@Bean标注的方法上使用

43720

Spring IoC 源码分析 (基于注解) (三)之 Bean的解析与注册

在上一篇文章Spring IoC 源码分析 (基于注解) 之 包扫描中,我们介绍了Spring基于注解扫描包获取bean的过程。...(candidate, this.registry); //如果扫描到的Bean不是Spring的注解Bean,则为Bean设置默认值, //设置Bean的自动依赖注入装配属性等...第三步、为Bean生成名称 再回到上面ClassPathBeanDefinitionScanner的doScan()方法中的第18行, 把我们获取到的Bean的作用域赋值给Bean。...第四步、给Bean的一些属性设置默认值 主要是doScan()中的如下两个方法: //如果扫描到的Bean不是Spring的注解Bean,则为Bean设置默认值, //设置Bean的自动依赖注入装配属性等...定义中有@ DependsOn注解,则为该Bean设置所依赖的Bean名称, //容器将确保在实例化该Bean之前首先实例化所依赖的Bean AnnotationAttributes dependsOn

1.1K30

SpringBoot源码学习(十一) - bean的实例化过程

上一篇文章中我们解释了Spring对于级别的注解的解析过程,通过级别的注解spring基本是将所有该加载的都加载到待解析的BeanDefineMap中去了。...但是BeanDefineMap可不是实例化的bean哦,可以说通过级别的注解之后Spring还是一个粗糙的商品,但是要变成一个精美的可以使用Bean还需要将这个粗糙的商品进行一番美化。...定义是不是抽象的bean定义 checkMergedBeanDefinition(mbd, beanName, args); //处理dependsOn的依赖(这个不是我们所谓的循环依赖...而是bean创建前后的依赖) //依赖bean名称 String[] dependsOn = mbd.getDependsOn(); if (dependsOn...()); } } return (T) bean; } 通过上述代码查看,我们大概描述一下getBean的过程,首先对bean名称做一些处理,之前的bean名称都是添加工厂名称

80620

SpringBean有序吗?试试用@DependsOn或static来提高优先级

传统Spring环境 场景一示例: 解决方案 方案一(不推荐):改变@Bean的定义顺序 方案二(推荐):使用@DependsOn 方案三(不推荐):使用@Lazy 场景二示例: 使用static...控制@Bean顺序 @DependsOn和static提升优先级的区别 总结 关注A哥 前言 顺序:意思是依次不乱。...所以生产上极不推荐这么做 ---- 方案二(推荐):使用@DependsOn Spring提供了一个@DependsOn注解,能够解决这类问题。...---- @DependsOn和static提升优先级的区别 其实把他俩放在一起比较其实蛮牵强的,根本不是同一回事嘛。...在实际使用中,我们的确并不需要控制每个Bean的顺序,只需操控其相对顺序即可。

2.6K41

【死磕 Spring】----- IOC 之开启 bean 的加载

Spring 在实现上述功能中,将整个流程分为两个阶段:容器初始化阶段和加载bean 阶段。...主要是一个循环获取 beanName 的过程,例如别名 A 指向名称为 B 的 bean 则返回 B,若 别名 A 指向别名 B,别名 B 指向名称为 C 的 bean,则返回 C。...对于单例模式 Spring 在创建 bean 的时候并不是bean 完全创建完成后才会将 bean 添加至缓存中,而是不等 bean 创建完成就会将创建 bean 的 ObjectFactory 提早加入到缓存中...,这样一旦下一个 bean 创建的时候需要依赖 bean 时则直接使用 ObjectFactroy。...但是原型模式我们知道是没法使用缓存的,所以 Spring 对原型模式的循环依赖处理策略则是不处理(关于循环依赖后面会有单独文章说明)。

65120

Spring读书笔记——bean创建(上)

通过《Spring读书笔记——bean加载》和《Spring读书笔记——bean解析》,我们明白了两件事。...容器中的bean名称,具体来说就是放入BeanDefinitionMap中的一个键值对的key。...从FactoryBean这个命名就知道他是一种bean不是病),*有关FactoryBean的介绍以及使用可以参看博文:http://blog.csdn.net/is_zhoufeng/article...* bean实例化 假设我们从缓存中得到了bean,但是这还不是bean的最终状态,可以认为这只是一个引用,要获得真正的bean实例,我们还需要看下getObjectForBeanInstance方法...原型模式的循环依赖检查 这里引用下上面提供有关循环依赖的链接中比较重要的内容 spring循环依赖的情况 1.构造器注入属性依赖(A B两个对象都使用构造方法,注入依赖的属性) 无论是单例,还是原型对象

68380
领券