spring - 如何配置@ComponentScan 以扫描特定包并从另一个包中获取单个类?
问题描述
如何配置组件扫描以从特定包和单个类中获取 bean?我正在尝试这种方式,但找不到 TestClass1.class 和 TestClass2.class:
@ComponentScan(
basePackages = {"com.example.package1", "com.example.package2"},
includeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = {com.example.package3.TestClass1.class, com.example.package3.TestClass2.class}))
解决方案
该属性basePackageClasses
不像您想象的那样起作用。它不仅扫描配置的类,它扫描每个类的完整包。
意思就是:
@ComponentScan( basePackages = {"com.example.package1", "com.example.package2"},
basePackageClasses = {com.example.package3.TestClass1.class, com.example.package3.TestClass2.class})
与以下内容完全相同:
@ComponentScan( basePackages = {"com.example.package1", "com.example.package2", "com.example.package2"} )
我想说最简单和最干净的方法是使用 @Bean 来定义每个 bean:
@SpringBootApplication
@ComponentScan(basePackages = {"com.example.package1", "com.example.package2"})
public class Application {
@Bean
public TestClass1 testClass1() {
// object creation
}
@Bean
public TestClass2 testClass2() {
// object creation
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
推荐阅读
- c++ - 使用概念的模板类方法特化
- mongodb - 更新 mongo 文档失败
- python - OpenCV:仅返回图像的选定区域并将其余区域返回为黑色
- spring - 如何在spring boot中为多对多关系表使用唯一约束?
- c - 为什么这个变量没有优化出来
- spring - SocketTimeoutException:springboot 应用程序的连接超时
- python - 将逐个元素的“系列”附加到现有的“系列”列表中
- google-sheets - 来自多个工作表的 Google 表格复杂数组
- r - 面板数据的增量总和
- kotlin - 如何在 IntelliJ IDEA 中截断堆栈跟踪输出?