首页 > 解决方案 > @ComponentScan 中的 excludeFilters 与 @EnableAutoConfiguration 中的 exclude

问题描述

弹簧靴的新手。

在尝试从 中排除 bean 时@ComponentScan,令我惊讶的是发现非常灵活的排除选项 from @EnableAutoConfiguration

据我了解,@Configuration是继承自@Component.

所以,

  1. 为什么我必须@EnableAutoConfiguration@ComponentScan.
  2. 我们有ASSIGNABLE_TYPE/REGEX/etc. 在排除。那么为什么我们还需要excludeFiltersfrom @ComponentScan.

彼此之间是否有任何限制,如果我们在这些排除项之间切换是不是不好的方法?

有人可以在这里澄清一下。

标签: javaspring-boot

解决方案


@ComponentScan@EnableAutoConfiguration用于初始化 spring 应用程序上下文的不同阶段。

  1. @ComponentScan- 用于扫描 bean 候选者,spring 会搜索各种注解,如@Component,@Configuration等,并获取 bean 候选者。这是弹簧的特点。
  2. @EnableAutoConfiguration- 用于扫描自动配置候选者,spring 将搜索标记为自动配置的配置并从中加载 bean 候选者。这是弹簧靴的特点。

可以对自动配置候选者进行注释@ComponentScan以加载 bean 候选者,但通常作为自动配置模块的模块会更精确并使用@Import或特殊注释。在你的 spring-boot 项目中,你应该有一个用它注解的类@SpringBootApplication,它同时具有@ComponentScan@EnableAutoConfiguration. 这将触发这两个功能并执行以下操作:

  1. 从带有注释的模块中加载所有候选 bean@SpringBootApplication
  2. 搜索类路径中加载的自动配置模块
  3. 尝试加载自动配置模块
  4. 尝试从您的自动配置模块加载候选 bean

当您从 中排除某些内容时@ComponentScan,它将被排除在特定@ComponentScan注释和过程的范围之外,无论它是您的模块还是您创建的自动配置模块。

当您从 中排除某些内容时@EnableAutoConfiguration,您会尝试排除自动配置候选者。另请注意,您不能排除正常@Configuration使用此注释,只能排除自动配置候选者。


推荐阅读