java - @ComponentScan 中的 excludeFilters 与 @EnableAutoConfiguration 中的 exclude
问题描述
弹簧靴的新手。
在尝试从 中排除 bean 时@ComponentScan
,令我惊讶的是发现非常灵活的排除选项 from @EnableAutoConfiguration
。
据我了解,@Configuration
是继承自@Component
.
所以,
- 为什么我必须
@EnableAutoConfiguration
从@ComponentScan
. - 我们有
ASSIGNABLE_TYPE/REGEX/etc
. 在排除。那么为什么我们还需要excludeFilters
from@ComponentScan
.
彼此之间是否有任何限制,如果我们在这些排除项之间切换是不是不好的方法?
有人可以在这里澄清一下。
解决方案
@ComponentScan
并@EnableAutoConfiguration
用于初始化 spring 应用程序上下文的不同阶段。
@ComponentScan
- 用于扫描 bean 候选者,spring 会搜索各种注解,如@Component
,@Configuration
等,并获取 bean 候选者。这是弹簧的特点。@EnableAutoConfiguration
- 用于扫描自动配置候选者,spring 将搜索标记为自动配置的配置并从中加载 bean 候选者。这是弹簧靴的特点。
可以对自动配置候选者进行注释@ComponentScan
以加载 bean 候选者,但通常作为自动配置模块的模块会更精确并使用@Import
或特殊注释。在你的 spring-boot 项目中,你应该有一个用它注解的类@SpringBootApplication
,它同时具有@ComponentScan
和@EnableAutoConfiguration
. 这将触发这两个功能并执行以下操作:
- 从带有注释的模块中加载所有候选 bean
@SpringBootApplication
- 搜索类路径中加载的自动配置模块
- 尝试加载自动配置模块
- 尝试从您的自动配置模块加载候选 bean
当您从 中排除某些内容时@ComponentScan
,它将被排除在特定@ComponentScan
注释和过程的范围之外,无论它是您的模块还是您创建的自动配置模块。
当您从 中排除某些内容时@EnableAutoConfiguration
,您会尝试排除自动配置候选者。另请注意,您不能排除正常@Configuration
使用此注释,只能排除自动配置候选者。
推荐阅读
- python - 这里继承合适吗?
- javascript - 将点击事件绑定到 Javascript 函数
- android - 尽管不在布局中,但仍在创建片段
- vba - 如何找出使用 VBA 写入 Excel 单元格时出现错误的原因?
- docker - CSV 数据集配置 - Jmeter Docker
- amazon-web-services - AWS Fargate ALB DNS 未解析
- android-studio - Android Studio 3.3 缺少喷气背包创建选项
- c - For循环在C中随机停止
- node.js - node.js 模块答案未定义
- angularjs - 带有 AngularJS 编译模板的 Ag-Grid 标头组件