Spring(26)——PathMatchingResourcePatternResolver
PathMatchingResourcePatternResolver可以用来解析资源文件,主要是用来解析类路径下的资源文件。当然它也可以用来解析其它资源文件,如基于文件系统的本地资源文件。PathMatchingResourcePatternResolver在使用时可以直接new一个对象,new的时候可以通过使用带ResourceLoader参数的构造方法指定需要使用的ResourceLoader,解析好了资源后获取资源时需要通过ResourceLoader获取。PathMatchingResourcePatternResolver其实也是实现了ResourceLoader接口的。空的构造方法将使用DefaultResourceLoader获取资源。大多数时候我们直接使用其空构造函数即可。以下是一些PathMatchingResourcePatternResolver的使用示例。
1.获取文件系统文件
获取文件系统文件时需要指定file前缀或者指定一个文件的绝对地址。如下示例就是取当前用户路径下的pom.xml文件的示例,这里用的是一个相对路径,也可以把它改成一个绝对路径。不加资源协议时会从类路径下去找对应的文件。
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
resource = resolver.getResource("file:pom.xml");
Assert.assertNotNull(resource);
Assert.assertNotNull(resource.getInputStream());
2.从类路径下获取指定的文件
以下示例是从类的根路径下获取applicationContext.xml文件。
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
//从classpath下获取单个的资源文件,classpath下没有将尝试把资源当做一个UrlResource
Resource resource = resolver.getResource("applicationContext.xml");
Assert.assertNotNull(resource);
Assert.assertNotNull(resource.getInputStream());
如果不是根路径,需要指定路径,比如下面就是从类路径的META-INF/spring目录下获取applicationContext.xml文件。
Resource resource = resolver.getResource("META-INF/spring/applicationContext.xml");
也可以明确的指定classpath前缀。
Resource resource = resolver.getResource("classpath:META-INF/spring/applicationContext.xml");
3.获取所有类路径下的指定文件
可以通过classpath*
前缀指定从所有的类路径下获取指定的文件,它与classpath前缀的区别是classpath前缀只能获取当前类路径下的资源文件,而classpath*
前缀可以获取所有类路径下的资源文件,包括jar包中的。以下示例就是从所有类路径下获取META-INF/spring目录下的applicationContext.xml文件。
Resource[] resources = resolver.getResources("classpath*:META-INF/spring/applicationContext.xml");
Assert.assertNotNull(resources);
Assert.assertTrue(resources.length == 1);
4.使用通配符获取满足某种格式的文件
在解析文件时可以通过*表示匹配所有的字符,比如下面的示例将匹配类的根路径下的所有的以applicationContext开头的xml文件。
Resource[] resources = resolver.getResources("classpath*:applicationContext*.xml");
Assert.assertNotNull(resources);
//笔者的classpath下一共有三个满足applicationContext*.xml的资源文件
Assert.assertTrue(resources.length == 3);
如果不是在根路径下,也可以指定路径。
Resource[] resources = resolver.getResources("classpath*:com/elim/learn/spring/applicationContext*.xml");
Assert.assertNotNull(resources);
//笔者的classpath下一共有三个满足applicationContext*.xml的资源文件
Assert.assertTrue(resources.length == 3);
假设我们的资源文件是按照模块划分的,放在不同的目录下面,比如com.elim.learn.spring路径下有,com.elim2.learn.spring路径下也有,那么我们可以把elim和elim2用*代替。
Resource[] resources = resolver.getResources("classpath*:com/*/learn/spring/applicationContext*.xml");
Assert.assertNotNull(resources);
//com.elim.learn.spring和com.elim2.learn.spring下各有三个applicationContext*.xml形式的资源文件
Assert.assertTrue(resources.length == 6);
也可以用两个*表示任意多层的目录。
Resource[] resources = resolver.getResources("classpath*:com/**/spring/applicationContext*.xml");
Assert.assertNotNull(resources);
//com.elim.learn.spring和com.elim2.learn.spring下各有三个applicationContext*.xml形式的资源文件
Assert.assertTrue(resources.length == 6);
关于PathMatchingResourcePatternResolver的更多介绍也可以参考它的Java doc文档。
(注:本文是基于Spring4.1.0所写,由Elim写于2017年10月9日)
Spring(26)——PathMatchingResourcePatternResolver相关推荐
- Spring(五):SpringStruts2Hibernate整合后,实现查询Employee信息
背景: 基于之前两篇文章<Spring(三):Spring整合Hibernate>.<Spring(四):Spring整合Hibernate,之后整合Struts2>,了解了如 ...
- Spring(二)IOC容器的初始化流程
文章目录 一.Spring 核心容器类 1.1 BeanFactory 1.2 ApplicationContext 1.3 BeanDefinition 二.IOC容器的初始化 2.1 基于Xml的 ...
- Spring(07)——单例注入多例之lookup-method
2019独角兽企业重金招聘Python工程师标准>>> Spring(07)--单例注入多例之lookup-method 博客分类: spring 7 单例注入多例之lookup-m ...
- Redis实战之征服 Redis + Jedis + Spring (三)
一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现"stringRedisTemplate.opsForList()"的强大,抓紧时间恶补下. 通过spring-d ...
- Spring(2)bean注入--Set方法注入
Spring(2)bean注入–Set方法注入 Set 方法注入 新建一个空的 maven项目. 导入依赖 <properties><project.build.sourceEnco ...
- 深度学习(26)随机梯度下降四: 损失函数的梯度
深度学习(26)随机梯度下降四: 损失函数的梯度 1. Mean Squared Error(MSE) 2. Cross Entropy Loss CrossEntropy 3. Softmax (1 ...
- spring(4)面向切面的Spring(AOP)
[0]README 1)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review "spring(4)面向切面的Spring(AOP) ...
- 视觉SLAM笔记(26) 状态估计问题
视觉SLAM笔记(26) 状态估计问题 1. 噪声 2. 噪声影响 3. 最大后验与最大似然 4. 最小二乘 1. 噪声 在前面介绍了经典 SLAM 模型的运动方程和观测方程 现在已经知道,方程中的位 ...
- ROS笔记(26) Movelt!
ROS笔记(26) Movelt! 1. Movelt!机械臂 2. 实现步骤 3. 运动组 4. 运动规划器 5. 规划场景 6. 运动学求解器 7. 碰撞检测 1. Movelt!机械臂 机械臂是 ...
- 深度学习笔记(26) 卷积神经网络
深度学习笔记(26) 卷积神经网络 1. CONV 2. POOL 3. Layer 4. FC 5. 卷积的优势 1. CONV 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片 ...
最新文章
- linux fork 目录,linux fork()理解
- 面向对象先导课程——PART3
- dom4j jar包_XML解析之DOM4j以及XPATH技术
- html 树状折叠,折叠树状页.html
- vim 批量注释代码
- VTK:结构化网格之BlankPoint
- 高性能MySQL-3rd-(六)查询性能优化
- Java8 Lambda总结
- BZOJ 4602: [Sdoi2016]齿轮 dfs
- python怎么矩阵的秩_python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...
- Microsoft SQL Server数据库部署过程
- JCreator 使用技巧-1
- [Winter Vacation] 语文实词虚词练习册答案
- Wangle源码分析:ClientBootstrap
- Unity分屏显示效果
- 解决photoshop cs5每次打开都输入序列号的问题 (至少我好用 win7 64位)
- 14期《读万卷书,行万里路》4月刊
- Linux Shell 编程语法
- 使用SfntTool制作字体剪辑工具1 - 直接使用sfnttool.jar
- 湛蓝.Net代码生成器发布了
热门文章
- BZOJ_P3110 [ZJOI2013]K大数查询(线段树+整体二分)
- 语音文件格式转换:.amr 转 .MP3, .wav格式
- 不属于计算机主机设备的是什么,以下不属于外部设备的是( )。 A.输入设备 B.中央处理器和主存储器 C.输出设备 D.外存储器...
- hermite spline
- 装配uwsgi和nginx rabbitMQ
- i7 10510u相当于什么处理器
- 如何用burpsuite和手机模拟器给apk抓包
- GWAS相关的曼哈顿图-SNP密度图
- Java图书管理系统(非正式系统任务导向型,内含完整项目代码),编辑Library类并完成TestDriver,南澳大学计算机大作业。
- 鬼压床、清明梦、外星劫持……睡眠麻痹症能够解释这些都市传说吗?