`
234390216
  • 浏览: 10229737 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462459
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775243
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398168
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:394945
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:679874
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:530768
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1183557
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:467450
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151272
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68019
社区版块
存档分类
最新评论

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日)

0
0
分享到:
评论

相关推荐

    Spring————面试题库

    Spring是一个开源的Java平台,它是Java应用程序开发的一个综合和广泛的基础支持平台。Spring框架的目的是帮助Java开发者解决在开发应用程序时遇到的基础性问题,让开发者能够专注于业务逻辑的开发,而不必担心底层...

    Spring系列——MVC框架整合.md

    Spring系列——MVC框架整合.md

    Spring Mvc——第一个应用程序

    **Spring MVC —— 第一个应用程序** Spring MVC 是 Spring 框架的一个模块,主要用于构建 Web 应用程序。它提供了一种模型-视图-控制器(MVC)架构,简化了开发过程,使得开发者可以专注于业务逻辑而不必过于关心...

    征服Spring AOP—— Schema

    本文将深入探讨“Spring AOP——Schema”,这是Spring AOP的一种配置方式,通过XML schema定义切面和通知。 首先,我们需要理解AOP的基本概念。面向切面编程是一种编程范式,旨在提高软件的模块化程度,将关注点...

    Quartz Spring整合——附带webservice Demo

    在"Quartz Spring整合——附带webservice Demo"的项目中,我们可以看到如何将这两个强大的工具结合在一起。这个Demo可能包含了一个使用Quartz调度器来触发Web服务调用的示例。Web服务(Webservice)是一种基于标准的...

    SpringCloud——Zookeeper(注册中心)

    SpringCloud为Zookeeper提供了一个名为`spring-cloud-starter-zookeeper`的启动器,允许开发者轻松地将Zookeeper集成到SpringBoot应用中。首先,我们需要在项目中引入依赖: ```xml <groupId>org.springframework...

    SpringCloud——声明性REST客户端(Feign)

    【SpringCloud——声明性REST客户端(Feign)】 在分布式微服务架构中,服务之间的通信是至关重要的。Spring Cloud提供了一种优雅的方式,通过Feign客户端来实现这一目标。Feign是一个声明式的Web服务客户端,它...

    SpringCloud——服务注册(consul)

    Spring Cloud作为微服务解决方案的一部分,提供了多种服务发现工具,其中Consul是其中一个流行的选择。本文将深入探讨Spring Cloud如何整合Consul实现服务注册。 Consul是由HashiCorp公司开发的一款分布式系统服务...

    Spring总结——田超凡.docx

    【Spring 框架概述】 Spring 是一个广泛应用于企业级 Java 开发的开源框架,由 Rod Johnson 创建,旨在简化 Java EE 应用的复杂性。它以轻量级、低侵入式的设计理念,提供了全面的解决方案,涵盖从表现层到业务逻辑...

    Spring特性——事件驱动模型

    本篇文章将深入探讨Spring框架的一个重要特性——事件驱动模型。通过理解这一特性,开发者可以更好地利用Spring来实现应用间的通信和协调,提高系统的灵活性和可扩展性。 事件驱动模型是一种设计模式,它基于发布/...

    SpringCloud——分布式跟踪(Sleuth)

    Spring Cloud Sleuth是Spring Cloud生态系统的一部分,它实现了分布式追踪的标准——OpenTracing和Zipkin。通过集成Sleuth,开发者可以在不修改代码的情况下,轻松地在微服务架构中实现请求的全链路追踪。 二、核心...

    Spring框架的简单实现

    我们从一个简单的容器开始,一步步的重构,最后实现一个基本的Spring框架的雏形,为了帮助我们更加深入的理解Spring的IoC...【SSH进阶之路】一步步重构容器实现Spring框架——彻底封装,实现简单灵活的Spring框架(十一)

    SpringCloud——客户端负载平衡器(Ribbon)

    Ribbon是一个客户端负载均衡器,它可以很好地控制HTTP和TCP客户端的行为。

    Spring.NET学习笔记26——整合NVelocity例子

    刘冬编写的Spring.NET学习笔记26——整合NVelocity例子。 原文:http://www.cnblogs.com/GoodHelper/archive/2009/11/20/SpringNet_NVelocity.html

    Spring开发指南——中文版

    《Spring开发指南——中文版》是由夏昕编著的一本针对Spring框架的中文教程,旨在帮助开发者更好地理解和应用Spring框架。Spring是Java平台上的一个核心框架,广泛应用于企业级应用开发,提供了一种全面的编程和配置...

    spring-boot-redis-annotation-demo:spring boot —— redis 缓存注解使用示例项目

    spring boot —— redis 缓存注解使用教程 示例项目地址: 依赖 在pom文件添加如下依赖 <groupId>org.springframework.boot <artifactId>spring-boot-starter-data-redis 配置 在application.yml配置文件添加...

Global site tag (gtag.js) - Google Analytics