|
package cn..io;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public
class Resource4 {
public
static
void main(String[] args) throws IOException {
String filePath= "C:" + File.separator + "Users" + File.separator + "Administrator" + File.separator
+ "Desktop"+File.separator+"pom.xml";
File file=new File(filePath);
ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("file:"+filePath);
if(resource.exists()){
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter(" ");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
,读取网络资源:
|
package cn..io;
import
java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public
class Resource4 {
public
static
void main(String[] args) throws IOException {
ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("http://www.springframework.org/schema/task/spring-task-4.1.xsd");
if(resource.exists()){
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter(" ");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
|
3,读取classp资源:
|
package cn..io;
import
java.io.File;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.DefaultResourceLoader;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
public
class Resource4 {
public
static
void main(String[] args) throws IOException {
ResourceLoader loader=new DefaultResourceLoader();
Resource resource=loader.getResource("classpath:applicationContext.xml");
if(resource.exists()){
Scanner scan=new Scanner(resource.getInputStream());
scan.useDelimiter(" ");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
|
这是可以发现我们只需要以字符串的形式配置不同的路径就能对不同的资源进行读取了。
之前都是直接在程序中配置完成的,但是这样做很明显不可能在实际开发中应用,最好的方式是以字符串的方式通过配置文件实现。现在我们就将所有的路径以字符串的形式在applicationContext文件中进行配置实现不同资源的读取。
1,设置一个专门负责资源处理的程序类:
|
package cn..util;
import java.io.IOException;
import java.util.Scanner;
import org.springframework.core.io.Resource;
public
class ResourceUtil {
private Resource src;
public
void setSrc(Resource src) {
this.src = src;
}
public
void print() throws IOException {
if (this.src.exists()) {
Scanner scan = new Scanner(this.src.getInputStream());
scan.useDelimiter("\n");
while (scan.hasNext()) {
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
|
2,在applicationContext.xml文件里对资源进行注入控制:
读取classpath资源:
|
<bean
id="resourceUtil"
class="cn.wnh.util.ResourceUtil">
<property
name="src"
value="classpath:applicationContext.xml"
/>
</bean>
|
读取网络资源:
|
<bean
id="resourceUtil"
class="cn.wnh.util.ResourceUtil">
<property
name="src"
value="http://www.springframework.org/schema/task/spring-task-4.1.xsd"
/>
</bean>
|
编写一个测试类
|
public
class TestMessage {
public
static
void main(String[] args) throws IOException {
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ResourceUtil ru=ctx.getBean("resourceUtil",ResourceUtil.class);
ru.print();
}
}
|
可以发现,程序里不再需要ResourceLoader了,这个类之间被Spring隐藏起来了。
4,实现多个资源的注入:
|
public
class ResourceUtil {
private Resource src[];
public
void setSrc(Resource src[]){
this.src=src;
}
public
void print() throws IOException{
for(int
x=0;x<this.src.length;x++){
if(this.src[x].exists()){
Scanner scan=new Scanner(this.src[x].getInputStream());
scan.useDelimiter("\n");
while(scan.hasNext()){
System.out.println(scan.nextLine());
}
scan.close();
}
}
}
}
|
|
<bean
id="resourceUtil"
class="cn.wnh.util.ResourceUtil">
<property
name="src">
<array>
<value>http://www.springframework.org/schema/task/spring-task-4.1.xsd
</value>
<value>classpath:applicationContext.xml</value>
</array>
</property>
</bean>
|
直接执行测试类进行测试,这是可以看到两个文件里的内容都读出来了。
4,Resource通配符:
在Resource处理资源的时候考虑到一些复杂资源的定位问题,所以引入了最初Ant工具中提出的通配符的概念,所以支持有以下三种通配符的使用:
"?":匹配任意一位字符;
"*":匹配任意多个字符;
"**":匹配任意多级目录的字符串内容。
(1)分别观察下面不同的通配符操作:
|
<bean
id="resourceUtil"
class="cn.mldn.util.ResourceUtils">
<property
name="src">
<array>
<value>classpath:x/**/LICENSE*</value>
</array>
</property>
</bean>
|
|
<bean
id="resourceUtil"
class="cn.mldn.util.ResourceUtils">
<property
name="src">
<array>
<value>classpath:**/LICENSE*</value>
</array>
</property>
</bean>
|
在定义资源路径的时候可以不受到目录的限制或细小名称的差别的限制。在开发中,最为常见的就是对"*.properties"文件的读取。
- Spring中ApplicationContext对事件的支持
Spring中ApplicationContext对事件的支持 ApplicationContext具有发布事件的能力.这是因为该接口继承了ApplicationEventPublisher接口. ...
- Spring中的资源文件框架——Resource
摘要 Spring4 以后,官方推荐我们使用Java Config来代替applicationContext.xml,声明将Bean交给容器管理. 在Spring Boot中,Java Config的 ...
- 简说Spring中的资源加载
声明: 本文若有 任何纰漏.错误,请不吝指正!谢谢! 问题描述 遇到一个关于资源加载的问题,因此简单的记录一下,对Spring资源加载也做一个记录. 问题起因是使用了@PropertySource来进 ...
- Spring中的资源加载
大家也都知道JDK的类加载器:BootStrap ClassLoader.ExtenSion ClassLoader.Application ClassLoader:也使用了双亲委派模型,主要是为了防 ...
- ClassPath资源的读取
读取ClassPath的资源 在程序中经常有很多资源需要读取,常见的就是配置文件,Java中将文件当作一种资源来处理,可以使用Class或者ClassLoader来处理 一,使用Class类的getS ...
- Spring中的Resource
Spring中的资源定义:Resource此接口的全名为:org.springframework.core.io.Resource比较常用的资源定义的实现类为:1.ClassPathResource ...
- Spring中资源的加载原来是这么一回事啊!
1. 简介 在JDK中 java.net.URL 适用于加载资源的类,但是 URL 的实现类都是访问网络资源的,并没有可以从类路径或者相对路径获取文件及 ServletContext , 虽然可以通过 ...
- Spring中使用@Value读取porperties文件中的属性值方法总结及注意事项
本文为博主原创,转载请注明出处. 此前曾总结过使用工具类读取properties文件中的属性值,有兴趣的可以看一下. 如何快速获取properties中的配置属性值:https://www.cnblo ...
- 8 -- 深入使用Spring -- 3...4 在ApplicationContext中使用资源
8.3.4 在ApplicationContext中使用资源 不管以怎样的方式创建ApplicationContext实例,都需要为ApplicationContext指定配置文件,Spring允许使 ...
随机推荐
- XInput和DirectInput
原文链接:https://msdn.microsoft.com/en-us/library/windows/desktop/ee417014(v=vs.85).aspx XInput是一个允许应用从W ...
- Struts2入门(一)
今天学习Struts2首先struts是一个成熟的框架.Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Cont ...
- iOS简单快速集成Cordova
如果你对于什么是Cordova还不了解,可以先移步到我另一个文章:Cordoval在iOS中的运用整理 里面有详细的介绍跟如何搭建Cordova:而本文则是要介绍JiaCordova插件,如果你有一点 ...
- Mac和Windows系统下Mysql数据库的导入导出
最近在构建数据库的过程中,需要将Mac os系统下的Mysql数据库导出成.sql文件,然后导入到windows系统下的Mysql中.经过学习总结出的步骤如下: 一.Mac os导出Mysql数据库 ...
- jenkins+ant+jmeter html报告文件作为附件发送(ant-jmeter支持javamail)
前言:由于ant-jmeter目前的版本不支持javamail,也就是说发送邮件时只能借助jenkins自带的发送邮件插件来发送报告. 但是jenkins发送邮件支持发送邮件内容(且有价值.有营养的内 ...
- 【T-SQL】系列文章全文目录(2017-06-02更新)
本系列[T-SQL]主要是针对T-SQL的总结. T-SQL基础 [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础 ...
- 关于 IDEA 自动识别问题,jsp页面Controller路径自动识别的问题
idea之所以强大,就是强大的代码提示和联想功能,写起代码来简直不要太爽.但是这几天我发现在我的jsp页面中访问controller路径的时候不会自动提示了,对于这么严谨的我肯定要找出原因啊,哈哈. ...
- 【初码干货】记一次分布式B站爬虫任务系统的完整设计和实施
[初码文章推荐] 程序员的自我修养 Azure系列文章 阿里云系列文章 爬虫系列文章 [初码产品推荐] AlphaMS开发模式 闪送达城市中央厨房 今天带来一个有意思的东西-分布式B站爬虫任务系统 这 ...
- mybatis中$和#java代码演示
MyBatis mapper文件中的变量引用方式#{}与${}的差别 内容来源:http://blog.csdn.net/szwangdf/article/details/26714603 默认情况下 ...
- centos 下 安装mysql
今天在centos上安装了一下 mysql 出现了一点问题 记录一下解决方案: 1:解决yum install mysql-server没有可用包的问题 sudo yum install mysql- ...
|