【问题标题】:Does @ComponentScan override @SpringBootApplication?@ComponentScan 是否覆盖 @SpringBootApplication?
【发布时间】:2021-04-08 22:12:48
【问题描述】:

我的@SpringBootApplication 注解存在于com.abc.def 包中。

根据这篇文章,使用@SpringBootApplication注解等同于使用@Configuration、@EnableAutoConfiguration和@ComponentScan及其默认属性:-

https://docs.spring.io/spring-boot/docs/2.0.x/reference/html/using-boot-using-springbootapplication-annotation.html

如果我提供我自己的@ComponentScan,它是向默认值添加新包还是完全覆盖默认值?

【问题讨论】:

  • 但这很容易找到,不是吗?
  • 我猜它会添加到默认值,但我需要加倍确定
  • 当我在应用程序类中添加 ComponentScan 时,我的 Junit 测试开始失败。(尽管在同一个包中)

标签: spring-boot


【解决方案1】:

注解@SpringBootApplication包含@EnableAutoConfiguration注解,它将扫描你在classpath中的jar、class和maven依赖来注册bean。如果你声明 bean 跨包并且只想使用特定包中的特定 bean,那么使用@ComponentScan

@ComponentScan 为您提供细粒度的包或类级别控制,以控制您声明将注册的 bean。

【讨论】:

    【解决方案2】:

    @SpringBootApplication 注解可以对 Application 类所属的包中的类进行组件扫描。您也可以添加@ComponentScan 来扫描不在应用程序类所属的包下的类。

    @ComponentScan("external.pkg")
    @SpringBootApplication
    class MyApp{
    }
    

    【讨论】:

      猜你喜欢
      • 2018-12-26
      • 2023-01-16
      • 1970-01-01
      • 2022-12-18
      • 1970-01-01
      • 2021-03-28
      • 2016-12-17
      • 2018-12-26
      • 2012-01-22
      相关资源
      最近更新 更多