spring中 base-package 属性指定要扫描的基础包。我们可以在配置中使用匹配符和占位符。

通配符说明:

  • ? 匹配一个字符
  • * 匹配空或匹配至少一个字符但不包含分割符(默认分割符为‘/’)
  • ** 匹配空或匹配至少一个字符可以包含分割符(默认分割符为‘/’)

<!-- 完整的包 -->
<context:component-scan base-package="com.test" /><!-- 使用通配符,只能匹配 com.a.test 无法匹配 com.a.b.test -->
<context:component-scan base-package="com.*.test" />
<!-- 使用通配符, 可以匹配 com.a.b.test 和com.a.test -->
<context:component-scan base-package="com.**.test" /><!-- 使用占位符-->
<context:component-scan base-package="com.${test}.test" />

spring 源码分析 ClassPathScanningCandidateComponentProvider:

解析步骤:

  1. 解析占位符
  2. 将“.”替换为“/”
  3. 追加 “/**/*.class”
  4. 由ResourcePatternResolver接口(默认采用 PathMatchingResourcePatternResolver实现)加载资源

PathMatchingResourcePatternResolver#findPathMatchingResources 源码

解析步骤:

  1. 将locationPattern分割为两部分,第一部分(rootDirPath)不包含匹配符,第二部分(subPattern)包含匹配符
  2. 获取rootDirPath下的所有资源,并将资源相对路径与subPattern 匹配。

注:路径与subPattern 的匹配是有 AntPathMatcher 类来实现的

对AntPathMatcher的测试:

 public static AntPathMatcher ant = new AntPathMatcher();public static void main(String[] args) {test("com*/test", "comaaaa/test");  // truetest("com*/test", "com/test");      // truetest("com**/test", "comaaaa/test"); // truetest("com**/test", "com/test");     // truetest("com**/test", "com/a/test");   // falsetest("com/*/test", "com/test");     // falsetest("com/*/test", "com/a/test");   // truetest("com/*/test", "com/a/b/test"); // falsetest("com/**/test", "com/test");    // truetest("com/**/test", "com/a/test");  // true  test("com/**/test", "com/a/b/test");// true }public static void test(String pattern, String text) {System.out.println(String.format("%s => %s : %s", pattern, text, ant.match(pattern, text)));}

base-package 详解相关推荐

  1. 从分布式环境的特点、问题到CAP、BASE理论详解

    分布式的特点: 定义: 分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过网络进行通信和协调的系统. 特点: 同一个分布式系统中的计算机在空间部署上可以是任意分布的,这些计算机 ...

  2. IRP(I/O Request Package)详解

    篇一: 简介: IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包. 当上层应用程序需要访问底层输入输出设备时,发出I/O请求,系统会把 ...

  3. 包package详解

    一.情景需求: 1.描述: 新建一个文件名Demo1,在里面写一个类文件Demo1,然后再新建一个文件名Demo2,在里面类文件仍然以Demo1命名,先对Demo1进行编译,然后再对Demo2进行编译 ...

  4. 分布式系统中的CAP理论和BASE理论详解

    一.CAP理论 CAP 理论/定理open in new window起源于 2000年,由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会(PODC)上提出,因此 CAP定理又被 ...

  5. Node.js中package.json中库的版本号详解(^和~区别)

    Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...

  6. Java包(package)详解

    Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...

  7. 《微信小程序-进阶篇》package.json版本说明及各类版本符号详解(一)

    大家好,这是小程序系列的第十一篇文章,在这一个阶段,我们的目标是 由简单入手,逐渐的可以较为深入的了解组件化开发,并且实践积累一些后续项目也就是原神资料站中用得着的组件: 1.<微信小程序-基础 ...

  8. npm install安装固定版本号以及package.json中版本号详解

    在npm中安装固定的版本号package,只需要在其后加 '@版本号' npm install three@0.102.1 Node.js中package.json中库的版本号详解: 1. ~ 匹配最 ...

  9. 基于CentOS6.5下snort+barnyard2+base的入侵检测系统的搭建(图文详解)(博主推荐)...

    为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...

  10. 【精讲】PCIe基础篇——BAR(Base Address Register)详解

    一.为什么需要BAR 系统中的每个设备中,对地址空间的大小和访问方式可能有不同的需求,例如,一个设备可能有256字节的内部寄存器/存储,应该可以通过IO地址空间访问,而另一个设备可能有16KB的内部寄 ...

最新文章

  1. 移动端input 无法获取焦点的问题
  2. 如何安装zabbix_get
  3. java 8 Streams简介
  4. 十三、制作 iVX音乐分享小程序
  5. 比特币系列——竞争币、竞争块链和应⽤程序
  6. C++设计模式——模板方法(Template Method)
  7. K3s(Kubernetes)环境使用Let‘s Encrypt证书的部署及自动配置https域名-阿里云域名解析管理
  8. 1.两数之和(力扣leetcode) 博主可答疑该问题
  9. 正则应用之--日期正则表达式
  10. Host是什么?如何设置host文件?
  11. 成功解决 AttributeError: ‘TySpider‘ object has no attribute ‘make_requests_from_url‘
  12. 大数据产业驱动智慧家庭发展
  13. Mobius反演(莫比乌斯反演)
  14. supervisord使用
  15. 【程序】STM32H743ZI单片机驱动DP83848以太网PHY芯片,移植lwip 2.1.3协议栈,并加入网线热插拔检测的功能
  16. 什么样的软文发布会更容易被新闻媒体进行收录和转载?
  17. 百度指数爬虫城市对应代码
  18. 《人工智能杂记》人工智能简史
  19. 操作符精讲——这些操作符你还记得几个?
  20. 微信开发者工具使用入门级项目1.4

热门文章

  1. vijos1027-spfa关键路径-休息中的阿呆
  2. 502 解决:[WARNING] fpm_children_bury
  3. 无心剑中译狄兰·托马斯《不要温顺地走进那个良夜》
  4. TYPEC无协议芯片最高可输出5V3A
  5. VIVADO 11.Divider除法器IP
  6. EFM32芯片jlink无法连接,无法调试,解锁流程
  7. Ubuntu Linux开机黑屏的永久解决办法
  8. 查看linux运存_linux如何查看内存?
  9. objective-c常见类型%z
  10. thinkpad如何禁用触摸板(触控板)或指点杆