首页 > 解决方案 > 如何配置@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}))

标签: springspring-boot

解决方案


该属性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);
    }
}

推荐阅读