base-package 详解
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:
解析步骤:
- 解析占位符
- 将“.”替换为“/”
- 追加 “/**/*.class”
- 由ResourcePatternResolver接口(默认采用 PathMatchingResourcePatternResolver实现)加载资源
PathMatchingResourcePatternResolver#findPathMatchingResources 源码
解析步骤:
- 将locationPattern分割为两部分,第一部分(rootDirPath)不包含匹配符,第二部分(subPattern)包含匹配符
- 获取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 详解相关推荐
- 从分布式环境的特点、问题到CAP、BASE理论详解
分布式的特点: 定义: 分布式系统是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅仅通过网络进行通信和协调的系统. 特点: 同一个分布式系统中的计算机在空间部署上可以是任意分布的,这些计算机 ...
- IRP(I/O Request Package)详解
篇一: 简介: IRP(I/O Request Package)在windows内核中,有一种系统组件--IRP,即输入输出请求包. 当上层应用程序需要访问底层输入输出设备时,发出I/O请求,系统会把 ...
- 包package详解
一.情景需求: 1.描述: 新建一个文件名Demo1,在里面写一个类文件Demo1,然后再新建一个文件名Demo2,在里面类文件仍然以Demo1命名,先对Demo1进行编译,然后再对Demo2进行编译 ...
- 分布式系统中的CAP理论和BASE理论详解
一.CAP理论 CAP 理论/定理open in new window起源于 2000年,由加州大学伯克利分校的Eric Brewer教授在分布式计算原理研讨会(PODC)上提出,因此 CAP定理又被 ...
- Node.js中package.json中库的版本号详解(^和~区别)
Node.js中package.json中库的版本号详解(^和~区别) 当我们查看package.json中已安装的库的时候,会发现他们的版本号之前都会加一个符号,有的是插入符号(^),有的是波浪符号 ...
- Java包(package)详解
Java包(package)详解 在编写Java程序时,随着程序架构越来越大,类的个数越来越多,这时候会发现管理程序中维护类名称也是一件很麻烦的事情,尤其是一些同名问题的发生.有时候,开发人员还可能需 ...
- 《微信小程序-进阶篇》package.json版本说明及各类版本符号详解(一)
大家好,这是小程序系列的第十一篇文章,在这一个阶段,我们的目标是 由简单入手,逐渐的可以较为深入的了解组件化开发,并且实践积累一些后续项目也就是原神资料站中用得着的组件: 1.<微信小程序-基础 ...
- npm install安装固定版本号以及package.json中版本号详解
在npm中安装固定的版本号package,只需要在其后加 '@版本号' npm install three@0.102.1 Node.js中package.json中库的版本号详解: 1. ~ 匹配最 ...
- 基于CentOS6.5下snort+barnyard2+base的入侵检测系统的搭建(图文详解)(博主推荐)...
为什么,要写这篇论文? 是因为,目前科研的我,正值研三,致力于网络安全.大数据.机器学习研究领域! 论文方向的需要,同时不局限于真实物理环境机器实验室的攻防环境.也不局限于真实物理机器环境实验室的大数 ...
- 【精讲】PCIe基础篇——BAR(Base Address Register)详解
一.为什么需要BAR 系统中的每个设备中,对地址空间的大小和访问方式可能有不同的需求,例如,一个设备可能有256字节的内部寄存器/存储,应该可以通过IO地址空间访问,而另一个设备可能有16KB的内部寄 ...
最新文章
- 移动端input 无法获取焦点的问题
- 如何安装zabbix_get
- java 8 Streams简介
- 十三、制作 iVX音乐分享小程序
- 比特币系列——竞争币、竞争块链和应⽤程序
- C++设计模式——模板方法(Template Method)
- K3s(Kubernetes)环境使用Let‘s Encrypt证书的部署及自动配置https域名-阿里云域名解析管理
- 1.两数之和(力扣leetcode) 博主可答疑该问题
- 正则应用之--日期正则表达式
- Host是什么?如何设置host文件?
- 成功解决 AttributeError: ‘TySpider‘ object has no attribute ‘make_requests_from_url‘
- 大数据产业驱动智慧家庭发展
- Mobius反演(莫比乌斯反演)
- supervisord使用
- 【程序】STM32H743ZI单片机驱动DP83848以太网PHY芯片,移植lwip 2.1.3协议栈,并加入网线热插拔检测的功能
- 什么样的软文发布会更容易被新闻媒体进行收录和转载?
- 百度指数爬虫城市对应代码
- 《人工智能杂记》人工智能简史
- 操作符精讲——这些操作符你还记得几个?
- 微信开发者工具使用入门级项目1.4
热门文章
- vijos1027-spfa关键路径-休息中的阿呆
- 502 解决:[WARNING] fpm_children_bury
- 无心剑中译狄兰·托马斯《不要温顺地走进那个良夜》
- TYPEC无协议芯片最高可输出5V3A
- VIVADO 11.Divider除法器IP
- EFM32芯片jlink无法连接,无法调试,解锁流程
- Ubuntu Linux开机黑屏的永久解决办法
- 查看linux运存_linux如何查看内存?
- objective-c常见类型%z
- thinkpad如何禁用触摸板(触控板)或指点杆