Spring(26)——PathMatchingResourcePatternResolver

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 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日)

目录
相关文章
|
Java 数据库连接 Spring
Spring Data JPA之Spring boot整合JPA进行CRUD(下)
Spring Data JPA之Spring boot整合JPA进行CRUD(下)
85 0
|
SQL 前端开发 Java
Spring Data JPA之Spring boot整合JPA进行CRUD(上)
Spring Data JPA之Spring boot整合JPA进行CRUD(上)
191 0
|
SQL XML Java
Spring--Spring5总结
Spring--Spring5总结
83 0
|
存储 XML Java
Spring【Spring的创建与使用】
Spring【Spring的创建与使用】
Spring【Spring的创建与使用】
|
Java 数据库 Spring
Spring与SpringBoot整合Spring Data JPA及使用(三)
Spring与SpringBoot整合Spring Data JPA及使用
127 0
Spring与SpringBoot整合Spring Data JPA及使用(三)
|
SQL Java 数据库连接
Spring与SpringBoot整合Spring Data JPA及使用(一)
Spring与SpringBoot整合Spring Data JPA及使用
206 0
Spring与SpringBoot整合Spring Data JPA及使用(一)
|
Java Spring
Spring与SpringBoot整合Spring Data JPA及使用(二)
Spring与SpringBoot整合Spring Data JPA及使用
187 0
Spring与SpringBoot整合Spring Data JPA及使用(二)
|
Java Spring 容器
Spring学习笔记(八)Spring Data JPA学习
Spring学习笔记(八)Spring Data JPA学习
190 0
Spring学习笔记(八)Spring Data JPA学习
|
XML Java 数据库连接
Spring 项目快速整合 JPA
前言 JDBC、JTA、JPA 都是 Java 与数据库打交道的标准,由于这些规范分别定义了不同的事务接口,Spring 对这些规范进行了整合,提供了统一的事务 API。Spring 的事务管理需要对这些标准做一些适配操作,才能转换为同一的接口,这篇就来谈谈如何在 Spring 中整合 JPA。
151 0
|
Java API Spring
Spring Boot 整合 Spring Data JPA
Java 持久化 API (JPA)是一个 Java 应用程序接口 规范,描述了使用 Java标准版平台(Java SE) 和 Java企业版平台(Java EE)的应用中的 关系数据 的管理
162 0