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相关推荐

  1. Spring(五):SpringStruts2Hibernate整合后,实现查询Employee信息

    背景: 基于之前两篇文章<Spring(三):Spring整合Hibernate>.<Spring(四):Spring整合Hibernate,之后整合Struts2>,了解了如 ...

  2. Spring(二)IOC容器的初始化流程

    文章目录 一.Spring 核心容器类 1.1 BeanFactory 1.2 ApplicationContext 1.3 BeanDefinition 二.IOC容器的初始化 2.1 基于Xml的 ...

  3. Spring(07)——单例注入多例之lookup-method

    2019独角兽企业重金招聘Python工程师标准>>> Spring(07)--单例注入多例之lookup-method 博客分类: spring 7 单例注入多例之lookup-m ...

  4. Redis实战之征服 Redis + Jedis + Spring (三)

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现"stringRedisTemplate.opsForList()"的强大,抓紧时间恶补下. 通过spring-d ...

  5. Spring(2)bean注入--Set方法注入

    Spring(2)bean注入–Set方法注入 Set 方法注入 新建一个空的 maven项目. 导入依赖 <properties><project.build.sourceEnco ...

  6. 深度学习(26)随机梯度下降四: 损失函数的梯度

    深度学习(26)随机梯度下降四: 损失函数的梯度 1. Mean Squared Error(MSE) 2. Cross Entropy Loss CrossEntropy 3. Softmax (1 ...

  7. spring(4)面向切面的Spring(AOP)

    [0]README 1)本文部分文字描述转自:"Spring In Action(中/英文版)",旨在review  "spring(4)面向切面的Spring(AOP) ...

  8. 视觉SLAM笔记(26) 状态估计问题

    视觉SLAM笔记(26) 状态估计问题 1. 噪声 2. 噪声影响 3. 最大后验与最大似然 4. 最小二乘 1. 噪声 在前面介绍了经典 SLAM 模型的运动方程和观测方程 现在已经知道,方程中的位 ...

  9. ROS笔记(26) Movelt!

    ROS笔记(26) Movelt! 1. Movelt!机械臂 2. 实现步骤 3. 运动组 4. 运动规划器 5. 规划场景 6. 运动学求解器 7. 碰撞检测 1. Movelt!机械臂 机械臂是 ...

  10. 深度学习笔记(26) 卷积神经网络

    深度学习笔记(26) 卷积神经网络 1. CONV 2. POOL 3. Layer 4. FC 5. 卷积的优势 1. CONV 假设,有一张大小为32×32×3的输入图片,这是一张RGB模式的图片 ...

最新文章

  1. linux fork 目录,linux fork()理解
  2. 面向对象先导课程——PART3
  3. dom4j jar包_XML解析之DOM4j以及XPATH技术
  4. html 树状折叠,折叠树状页.html
  5. vim 批量注释代码
  6. VTK:结构化网格之BlankPoint
  7. 高性能MySQL-3rd-(六)查询性能优化
  8. Java8 Lambda总结
  9. BZOJ 4602: [Sdoi2016]齿轮 dfs
  10. python怎么矩阵的秩_python – 从numpy或matlab中的满秩非矩形矩阵中获取可逆方阵...
  11. Microsoft SQL Server数据库部署过程
  12. JCreator 使用技巧-1
  13. [Winter Vacation] 语文实词虚词练习册答案
  14. Wangle源码分析:ClientBootstrap
  15. Unity分屏显示效果
  16. 解决photoshop cs5每次打开都输入序列号的问题 (至少我好用 win7 64位)
  17. 14期《读万卷书,行万里路》4月刊
  18. Linux Shell 编程语法
  19. 使用SfntTool制作字体剪辑工具1 - 直接使用sfnttool.jar
  20. 湛蓝.Net代码生成器发布了

热门文章

  1. BZOJ_P3110 [ZJOI2013]K大数查询(线段树+整体二分)
  2. 语音文件格式转换:.amr 转 .MP3, .wav格式
  3. 不属于计算机主机设备的是什么,以下不属于外部设备的是( )。 A.输入设备 B.中央处理器和主存储器 C.输出设备 D.外存储器...
  4. hermite spline
  5. 装配uwsgi和nginx rabbitMQ
  6. i7 10510u相当于什么处理器
  7. 如何用burpsuite和手机模拟器给apk抓包
  8. GWAS相关的曼哈顿图-SNP密度图
  9. Java图书管理系统(非正式系统任务导向型,内含完整项目代码),编辑Library类并完成TestDriver,南澳大学计算机大作业。
  10. 鬼压床、清明梦、外星劫持……睡眠麻痹症能够解释这些都市传说吗?