【问题标题】:Spring - multiple configurations and @CompontentScan orderSpring - 多种配置和@CompontentScan 顺序
【发布时间】:2019-06-07 12:45:48
【问题描述】:

我有多个定义 bean 的 Spring @Configuration 类。我运行应用程序的主类有@SpringBootApplication(scanBasePackageClasses = BasePackage.class)

我的问题,扫描这些组件和创建 bean 的顺序是什么?

@SpringBootApplication(scanBasePackageClasses = BasePackage.class)
public class MyApplication {

    public static void main(final String[] args) {
        SpringApplication.run(MyApplication.class, args);
    }
}

和配置

@Configuration
class Config1{
    // defines beans
}

@Configuration
class Config2{
    // defines beans
}

另一个maven依赖也有Config3

@Configuration
class Config3{
    // defines beans
}

我试图搜索文档,但我没有找到扫描和初始化这些组件的顺序。

https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/ComponentScan.html

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/condition/ConditionalOnMissingBean.html

https://docs.spring.io/spring-boot/docs/current/api/org/springframework/boot/autoconfigure/EnableAutoConfiguration.html

更新

我问这个问题是因为我有一个具有 @ConditionalOnMissingBean 的 bean,以及定义它的多个配置。在官方文档中的声明中,@Configuration 类被扫描到了哪个顺序。

【问题讨论】:

  • 虽然没有回答您的查询,但请注意:@Order.. 注释可用于控制加载顺序
  • 同意,但是如果没有@Order,Spring如何定义顺序?

标签: java spring-boot


【解决方案1】:

在第一步中,Spring 会扫描与您的基本包相关的所有类以查找 bean。然后spring将创建bean并注入它。

如果您需要按特定顺序创建 bean,您可以添加 @DependsOn

来自文档:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-03
    • 2015-02-24
    • 2018-04-14
    • 1970-01-01
    • 2016-10-30
    • 2016-06-30
    • 2014-01-19
    相关资源
    最近更新 更多