1. 包扫描的路径
@ComponentScan 注解可以指定包扫描的路径(而且还可以声明不止一个),它的写法是使用 @ComponentScan 的 value / basePackages 属性:
@Configuration
@ComponentScan("com.linkedbear.spring.annotation.e_basepackageclass.bean")
public class BasePackageClassConfiguration {
}
1.1 声明几个组件类+配置类
继续沿用之前注解驱动 IOC 的包吧,咱这里创建一个 e_basepackageclass 包,声明几个组件和配置类:
1.2 标注配置类的包扫描规则
配置类中,声明包扫描配置,咱先拿 DemoService 传进去:
@Configuration
@ComponentScan(basePackageClasses = DemoService.class)
public class BasePackageClassConfiguration {
}
1.3 测试运行
编写启动类,驱动 IOC 容器,并打印容器中所有的 Bean 的名称:
public class BasePackageClassApplication {
public static void main(String[] args) throws Exception {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(BasePackageClassConfiguration.class);
String[] beanDefinitionNames = ctx.getBeanDefinitionNames();
Stream.of(beanDefinitionNames).forEach(System.out::println);
}
}
运行 main 方法,发现控制台中只打印了 DemoService 与 DemoDao :
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
basePackageClassConfiguration
demoDao
demoService
说明它确实以 DemoService 所在的包为基准扫描了,不过没有扫描到 DemoComponent 。