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

Spring `@Configuration`类的排序

是指在Spring应用程序中,多个@Configuration类的加载顺序。@Configuration类是用于定义Spring Bean的Java类,它们通常包含了@Bean注解来声明Bean的创建和配置。

在Spring中,@Configuration类的排序是根据它们的依赖关系来确定的。如果一个@Configuration类依赖于另一个@Configuration类中定义的Bean,那么被依赖的@Configuration类会先被加载。

Spring框架使用了一种叫做ConfigurationClassParser的类来解析@Configuration类,并构建一个配置类的依赖关系图。在解析过程中,Spring会检查@Configuration类之间的依赖关系,并按照拓扑排序的方式来确定加载顺序。

拓扑排序是一种图算法,用于解决有向无环图(DAG)的排序问题。在Spring中,@Configuration类之间的依赖关系可以看作是一个有向无环图,其中每个@Configuration类是一个节点,依赖关系是有向边。通过拓扑排序,Spring可以确定@Configuration类的加载顺序,以保证依赖关系正确。

在实际应用中,如果存在多个@Configuration类,并且它们之间存在依赖关系,可以通过以下方式来确保它们的正确排序:

  1. 使用@DependsOn注解:可以在@Configuration类上使用@DependsOn注解来指定依赖的其他@Configuration类的Bean名称。这样,被依赖的@Configuration类会先被加载。
  2. 使用@Import注解:可以在一个@Configuration类中使用@Import注解来导入其他@Configuration类。被导入的@Configuration类会先被加载。
  3. 使用@Order注解:可以在@Configuration类上使用@Order注解来指定加载顺序。@Order注解的值越小,优先级越高,会先被加载。
  4. 使用@ComponentScan注解:可以在一个@Configuration类中使用@ComponentScan注解来扫描其他@Configuration类所在的包,并按照包的扫描顺序来加载。

总之,Spring @Configuration类的排序是通过解析依赖关系和使用相关注解来确定的。通过合理使用@DependsOn@Import@Order@ComponentScan等注解,可以确保@Configuration类的正确加载顺序,从而保证Spring应用程序的正常运行。

腾讯云相关产品和产品介绍链接地址:

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

相关·内容

SpringConfiguration理解

Spring3.0,@Configuration用于定义配置,可替换xml配置文件,被注解内部包含有一个或多个被@Bean注解方法,这些方法将会被AnnotationConfigApplicationContext...注意:@Configuration注解配置有如下要求: @Configuration不可以是final类型; @Configuration不可以是匿名; 嵌套configuration必须是静态...一、@Configuation加载Spring方法 1.1、@Configuration配置spring并启动spring容器 @Configuration标注在上,相当于把该类作为springxml...(返回某个实例方法),等价于springxml配置文件中,作用为:注册bean对象 bean: package com.dxz.demo.configuration; public...嵌套(嵌套Configuration必须是静态) 通过配置嵌套配置,达到组合多个配置目的。

52620
  • spring configuration注解原理

    spring既支持xml式配置bean,也可以通过@Configuration注解来配置bean,xml是spring最初支持方式,随着springboot出现,通过@Configuration注解来配置...注解工作核心方法,spring应用启动时所有的被@Configuration注解都会被spring cglib库生成cglib动态代理,然后其他地方通过@Autowired注解引入Student对象就会被生成...configuration配置生成动态代理拦截,处理完后再调用原configuration注解student方法获取到Student实例。...Configuration注解初始化过程我们知道了,那么在Configuration注解内@Bean注解方法又是如何被调用呢,不着急,下面我们将随着源码探究揭开这层面纱。...想要了解更多可以在调试spring项目时进入对应源码跟踪调试。

    47620

    真懂Spring@Configuration配置?你可能自我感觉太良好

    我对Spring配置Full/Lite模式关注和记忆深刻,源自于一个小小故事:某一年我在看公司项目时发现,数据源配置里有如下一段配置代码: @Configuration public class...@Configuration和@Bean Spring配置体系中最为重要构件是:@Configuration标注,@Bean标注方法。...@ImportResource注解 若上没有任何注解,但内存在@Bean方法 以上case前提均是上没有被标注@Configuration,在Spring 5.2之后新增了一种case也算作Lite...(对应Spring Boot 2.2.0)开始,内置几乎所有的@Configuration配置都被修改为了@Configuration(proxyBeanMethods = false),目的何为?...自Spring5.2后这句话改为下面这样我觉得更为精确些: 标注有@Configuration或者@Configuration(proxyBeanMethods = true)被称为Full模式配置

    67020

    真懂Spring@Configuration配置?你可能自我感觉太良好

    我对Spring配置Full/Lite模式关注和记忆深刻,源自于一个小小故事:某一年我在看公司项目时发现,数据源配置里有如下一段配置代码: @Configuration public class...@Configuration和@Bean Spring配置体系中最为重要构件是:@Configuration标注,@Bean标注方法。...@ImportResource注解 若上没有任何注解,但内存在@Bean方法 以上case前提均是上没有被标注@Configuration,在Spring 5.2之后新增了一种case也算作Lite...(对应Spring Boot 2.2.0)开始,内置几乎所有的@Configuration配置都被修改为了@Configuration(proxyBeanMethods = false),目的何为?...自Spring5.2后这句话改为下面这样我觉得更为精确些: 标注有@Configuration或者@Configuration(proxyBeanMethods = true)被称为Full模式配置

    9.1K128

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

    @Order注解等并不能控制Bean加载顺序~~因为你如果熟悉原理了就知道Spring在解析Bean时候,根本就没有参考这个注解 另外@Configuration配置加载,也不会受到@Order...因为之前源码解释过,它拿到配置数组,仅仅就是一个for循环遍历去解析了 另外需要说明一点是:@Configuration注解解析顺序,在Spring Boot环境下会受到影响(毕竟Boot...由于使用方式很简单,因此略过~ @Configuration配置顺序控制 @Configuration配置也是容器里面一个特殊Bean,因为它不需要完成业务功能,因此它 纯Spring环境 由于在纯...Spring环境下,Config配置都是由我们手动指定传进去,所以Spring并没有再对它进行排序处理。...class RootConfig { // 虽然入参里Parent 在配置Root2Config里,但spring还是能够去容器中找过来

    2.8K20

    Spring注解篇:@Configuration详解

    此外,还将分享使用案例和应用场景,以及对@Configuration注解优缺点进行分析。概述@Configuration注解是Spring框架中用于标记配置注解。...源码解析@Configuration注解源码中,它实际上是@Component注解特化,意味着被标记会被组件扫描自动检测到,并注册为Spring容器中一个Bean。...使用案例分享在一个典型Spring应用程序中,我们可能会有一个名为AppConfig,使用@Configuration注解来定义一些Bean:@Configurationpublic class...核心方法介绍@Configuration注解核心在于它允许开发者使用@Bean注解来声明方法,这些方法将被Spring容器调用以创建Bean实例。...在示例代码中,AppConfig通过@Configuration注解被注册到Spring容器中,而MyBean创建和使用则展示了Bean自动装配和生命周期管理。

    8911

    springBean (@Bean、@Configuration和@TestConfiguration)

    bean在spring中可以理解为一个对象。理解这个对象需要换一种角度,即可将spring看做一门编程语言,@Bean是spring语言声明对象标识。...spring启动过程中会自动扫描注解,当遇到能产生Bean注解(见下方列表)后,会将注解自动实例化(自动扫描及实例化只进行一次),之后将这个实例放到spring框架容器中,当需要使用时(自动装配...在A中声明属性B时加上注解@Autowired,A实例化时spring会自动从容器中调动B实例。为了让spring能从容器中调用B实例,需在B声明上有能产生Bean注解。 5....@Configuration和@TestConfiguration @Bean是一个方法级别上注解,主要用在@Configuration注解里,也可以用在@Component注解里。...添加beanid为方法名 下面是@Configuration一个例子 @Configuration public class AppConfig { @Bean public

    1.9K20

    Spring核心——@Configuration与混合使用

    @Configuration 在介绍Spring核心容器系列文章中已经多次出现这个注解,从使用角度来说可以把他理解为XML配置中标签,但是两者肯定是不等价。...首先可以很负责告诉码友们Spring并没有限制这个方式去添加Bean,所以例子中AliceBob实例就是IoC容器中实例。即使是这样去注入Bean同样实现了依赖注入功能。...Spring实际上是使用CGLIB为Config添加了一个“代理壳”,当我们在任何地方直接调用@Configuration标注方法时,代理壳都会将其整理为一个BeanDefinition转换过程...在spring官网将用@Configuration创建@Bean称呼为"Full"模式、将@Component创建@Bean称呼为"'lite"模式,从字面上也能略知他们差异。...由于是一个Stereotype模式@Configuration标记(@Configuration继承自@Component,提供了配置相关分层功能,关于Stereotype模式内容相见Stereotype

    59230

    java:commons-configuration2与spring集成

    总的来说功能要比spring内置yaml提供更丰富配置支持, commons-configuration2还很贴心提供了与Spring集成实现。...commons-configuration2提供ConfigurationPropertySource,直接将一个commons-configuration2Configuration接口实例封装为...SpringPropertySource实例(yaml文件最终也是被封装为该实例),这样就可以将它无差别的装卸到Spring框架。...总结 ConfigurationPropertySource实现并不复杂,如果你项目有特别要求完全可以仿照它自己将配置对象封装为SpringPropertySource实例。...commons-configuration2Configuration实例注入Spring后,在各种Spring场景下可以以与application.yml中定义配置参数一致方式进行访问。

    56820

    SpringSpring Boot和TestNG测试指南 - 测试@Configuration

    Github地址 在Spring引入Java Config机制之后,我们会越来越多使用@Configuration来注册Bean,并且Spring Boot更广泛地使用了这一机制,其提供大量Auto...本章举例测试@Configuration和Auto Configuration方法(因为Auto Configuration也是@Configuration,所以测试方法是一样)。...和Spring Boot都是用JUnit做测试,而JUnit特性是每次执行测试方法前,都会new一个测试实例,而TestNG是在共享同一个测试实例。...例子2:测试@Conditional Spring Framework提供了一种可以条件控制@Configuration机制,即只在满足某条件情况下才会导入@Configuration,这就是@Conditional...(context, "foo.create=false"); 例子4:测试Configuration Properties Spring Boot还提供了类型安全Configuration Properties

    1.2K20

    【小家SpringSpring解析@Configuration注解处理器:ConfigurationClassPostProcessor(ConfigurationClassParser)

    @ConfigurationSpring3.0推出来注解,用来代替xml配置文件。...@Configuration注解配置文件是支持order排序。...如果不是上面两种情况,那么有@Bean注解修饰方法也是简化配置 完整@Configuration和Lite @Bean模式(Full模式和Lite模式区别) 首先看看Spring对此定义:在ConfigurationClassUtils...建议:不要使用Lite模式,会带来不少莫名其妙坑 @Configuration注解配置有如下要求 @Configuration不可以是final类型 @Configuration不可以是匿名...ConfigurationClassParser 总结 Spring工具ConfigurationClassParser用于分析@Configuration注解配置,产生一组ConfigurationClass

    1.6K40
    领券