|
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允许使 ...
随机推荐
- .net后台获取DataTable数据,转换成json数组后传递到前台,通过jquery去操作json数据
一,后台获取json数据 protected void Page_Load(object sender, EventArgs e){ DataTable dt = DBhepler.GetDataT ...
- Nginx教程(二) Nginx虚拟主机配置
Nginx教程(二) Nginx虚拟主机配置 1 虚拟主机管理 1.1 Nginx管理虚拟主机 虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主 ...
- Java读写Excel之POI超入门
转自:http://rensanning.iteye.com/blog/1538591 Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给J ...
- FPGA两种寄存器的使能
在FPGA中,寄存器的使能设计一般有两种方式: 1.直接使用寄存器的使能端口. 2.使用一个数据选择器连接寄存器的D端口,通过数据选择器的sel端口做使能.如下图 这个方式与直接使用寄存器的CE端口有 ...
- linux tcp中time_wait
http://www.cnblogs.com/my_life/articles/3460873.html http://blog.csdn.net/sunnydogzhou/article/detai ...
- 项目管理之 SVN 管理软件 CornerStone for Mac
常用的项目管理有 Git 和 SVN.之前公司一直使用的是 Git,使用的是 SourceTree 客户端,据说 Git 比 SVN 要好,只能说各有特点吧,有兴趣的可以查看下两个的区别. 下面是学习 ...
- [转]tomcat部署
转载博客原文地址: http://www.cnblogs.com/xing901022/p/4463896.html 阅读目录 介绍 静态部署——在tomcat启动时部署 动态部署——在tomcat ...
- 每天一个JS 小demo之留言板。主要知识点:DOM方法的理解和运用
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"& ...
- Bottle源码阅读笔记(二):路由
前言 程序收到请求后,会根据URL来寻找相应的视图函数,随后由其生成页面发送回给客户端.其中,不同的URL对应着不同的视图函数,这就存在一个映射关系.而处理这个映射关系的功能就叫做路由.路由的实现分为 ...
- Webpack 代码分离
Webpack 代码分离 代码分离是 webpack 中最引人注目的特性之一. 你可以把你的代码分离到不同的 bundle 中,然后你就可以去按需加载这些文件. 总的来说, webpack 分离可以分 ...
|