java - @ComponentScan 中的 excludeFilters 与 @EnableAutoConfiguration 中的排除

标签 java spring-boot

Spring Boot 的新手。

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

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

所以,

  1. 为什么我必须从 @EnableAutoConfiguration 中删除配置,为什么不从 @ComponentScan 中删除配置。
  2. 我们有 ASSIGNABLE_TYPE/REGEX/etc。在排除。那么,为什么我们仍然需要 @ComponentScan 中的 excludeFilters

彼此之间是否存在任何限制?如果我们在这些排除项之间切换是否是一种糟糕的做法?

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

最佳答案

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

  1. @ComponentScan - 用于扫描候选 bean,spring 将搜索各种注释,如 @Component@Configuration 等,以及拿bean候选人。这是 Spring 的特性。
  2. @EnableAutoConfiguration - 用于扫描自动配置候选者,spring 将搜索标记为自动配置的配置并从中加载 bean 候选者。这是 spring boot 的特性。

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

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

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

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

关于java - @ComponentScan 中的 excludeFilters 与 @EnableAutoConfiguration 中的排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56081647/

相关文章:

java - 是否可以从 Java 启动交互式进程?

java - 如何在 Spring Boot 中将 @MockBean 与 JUnit 5 一起使用?

java - 如何将 admob 放置在不在屏幕顶部的位置(在 marmalade sdk 的 java 类中)

java - Common Pojo - 基于父pojo的动态错误消息 - Spring验证

java - 如何获取 Firebase 数据库中子条目的总和

java - Spring Boot REST API 的 @PutMapping 和 @DeleteMapping 的 HTTP 状态?

java - Springboot嵌入式Tomcat类加载器缓慢

java - 父项目和子项目中的Application.properties

java - Log4J2 以编程方式读取属性文件时不记录任何内容

java - 当所选选项具有空值时将嵌套对象设置为 null