Skip to content

如何理解自动扫描目录

HaojunRen edited this page Nov 16, 2022 · 3 revisions

自动扫描目录功能为省掉手工配置扫描目录而设定的,当使用者手工配置了扫描目录,则采用使用者配置的目录,如果没配置,则采用自动扫描目录的方式

如下配置是手工配置扫描目录的样例

# 路由策略的时候,需要指定对带有@RestController或者@ServiceStrategy注解的类的扫描路径。此项配置作用于RPC方式的调用拦截、提供端的服务隔离、调用链和告警三项功能
spring.application.strategy.scan.packages=com.nepxion.discovery.guide.service

① 自动扫描目录的配置

# 启动和关闭自动扫描目录,当扫描目录未人工配置的时候,可以通过自动扫描方式决定扫描目录。缺失则默认为true
spring.application.strategy.auto.scan.packages.enabled=true
# 启动和关闭嵌套扫描,嵌套扫描指扫描非本工程下外部包的目录,可以支持多层嵌套。缺失则默认为false
spring.application.strategy.auto.scan.recursion.enabled=false

② 自动扫描目录的逻辑

在假设的场景中,SpringBoot入口设定扫描目录为com.a,com.a目录下有个Spring对象通过ComponentScan方式设定扫描目录为com.b,com.b目录下有个Spring对象通过ComponentScan方式设定扫描目录为com.c,那么最终计算出来的目录为

嵌套扫描下,得到的扫描目录是

SpringBoot入口所在的目录;com.a;com.b;com.c

非嵌套扫描下,得到的扫描目录是

SpringBoot入口所在的目录;com.a

③ 扩展获取自动扫描目录

使用者可以通过如下代码得到自动扫描目录

public class MyService {
    @Autowired
    private StrategyPackagesExtractor strategyPackagesExtractor;

    public void getPackages() {
        // 获取@SpringBootApplication所在类入口的扫描目录(一般只有一个),返回List<String>类型
        strategyPackagesExtractor.getBasePackagesList();

        // 获取所有嵌套的扫描目录(包括当前工程的所有类中@SpringBootApplication和@ComponentScan注解设定的扫描目录),返回List<String>类型
        strategyPackagesExtractor.getScanningPackagesList();

        // 上面两种目录的相加,返回List<String>类型
        strategyPackagesExtractor.getAllPackagesList();
    }
}




2017-2050 ©Nepxion Studio Apache License

           

Total visits

讲义篇

集成篇

概念篇

实践篇

功能篇

配置篇

扩展篇

测试篇

升级篇

贡献篇

Clone this wiki locally