前言:
1、大家都知道,Springboot主启动加载会默认扫描同级包目录下所有的组件类、配置类,然后进行解析注入到Spring容器中。@SpringBootApplication 是个联合注解,里面包含了 @ComponentScan 组件扫描注解,所以我们不需要单独在主启动类上标注 @ComponentScan
2、如果我们需要扫描主启动类同级以外的包目录怎么?下面看下 @ComponentScans和@ComponentScan 的使用
3、验证用的项目结构为:
一、使用 @ComponentScans 指明需要扫描的包目录
1、示例代码:
@ComponentScans(value = {@ComponentScan(basePackages = {"test.componentscans.configure", "test.componentscans.dto"})})
说明:
【1】@ComponentScans 的属性值 value 为 @ComponentScan 类型的数组
【2】@ComponentScan 的 value 或 basePackages 为具体要扫描的包目录
【3】basePackages 的值支持包全路径、也支持通配符,例如:com.xxx.*
【4】在主启动单独使用 @ComponentScans 的时候,不需要指明主启动类同级包目录,不会影响默认扫描主启动类同级包目录
二、使用 @ComponentScan 指明需要扫描的包目录
1、示例代码:
@ComponentScan(basePackages = {"com.hkl.*", "test.componentscans.configure", "test.componentscans.dto"})
说明:
【1】@ComponentScan 的 value 或 basePackages 为具体要扫描的包目录
【2】basePackages 的值支持包全路径、也支持通配符,例如:com.xxx.*
注意:
【1】因为 @SpringBootApplication 中已经包含 @ComponentScan 注解、并且用以扫描主启动类同级目录下的组件配置类,所以我们在主启动类上再使用 @ComponentScan 注解,会覆盖掉 @SpringBootApplication 中的 @ComponentScan,从而导致不会默认扫描主启动类同级包目录
【2】因此在使用 @ComponentScan 注解的时候,需要把各个包目录都指明,包括主启动类的同级包目录
三、总结:
1、@SpringBootApplication 是联合注解,包含了 @ComponentScan 会默认扫描主启动类同级包目录下所有的组件类、配置类
2、在主启动类单独使用 @ComponentScan 注解的时候,需要把各个包目录都指明,包括主启动类的同级包目录(否则无法默认扫描主启动类同级包目录)
3、在主启动单独使用 @ComponentScans 的时候,只需指明主启动同级包以外的包目录就可以,不需要指明主启动类同级包目录,不会影响默认扫描主启动类同级包目录。(如需扫描主启动类之外的组件,推荐使用@ComponentScans)
版权归原作者 拄杖忙学轻声码 所有, 如有侵权,请联系我们删除。