0


SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑

前言:
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)

标签: spring boot spring

本文转载自: https://blog.csdn.net/hkl_Forever/article/details/128114841
版权归原作者 拄杖忙学轻声码 所有, 如有侵权,请联系我们删除。

“SpringBoot主启动类使用@ComponentScans、@ComponentScan扫描组件类,注意避坑”的评论:

还没有评论