热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

10spring学习注入Resource

注入Resource虽然Resource的子类利用了字符串格式进行了隐藏,但是此时的代码中,ResourceLoader跟我的开发没有任何关系ÿ

注入Resource

虽然Resource 的子类利用了字符串格式进行了隐藏,但是此时的代码中,ResourceLoader跟我的开发没有任何关系,

如果真的开发只关心Resource一个接口就够了。

 

为了解决Resource与ResourceLoader的操作的耦合问题,在spring设计的时候考虑到了数据的自动转型问题。也就是说,利用注入的操作

模式,就可以让ResourceLoader消失。

范例:编写一个资源处理类

package com.Resource.util;
import org.springframework.core.io.Resource;public class ResourceBean {private Resource resource;public void setResource(Resource resource) {this.resource = resource;}public Resource getResource() {return resource;}
}

要想实现数据资源的注入操作,必须编写applicationContext.xml文件,在这个文件里定义所需要的资源。

范例:在applicationContext.xml文件里面定义资源信息

class="com.Resource.util.ResourceBean">file:D:\\text.xml">

 

范例:测试代码:

package com.Test;import java.util.Scanner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.Resource.util.ResourceBean;public class TestResource {public static void main(String[] args) throws Exception {ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");
     //实例化,初始ResourceBean类,并且在applicationContext.xml里面给resource赋值,这个值就指定了Resource的资源路径ResourceBean reb
=ctx.getBean("rb",ResourceBean.class);
     由这个实例对象,获取它的变量Resource对象,并且通过getInputStream方法,获取资源,给ScannnerScanner scan
=new Scanner(reb.getResource().getInputStream());scan.useDelimiter("\n");while(scan.hasNext()){System.out.println(scan.nextLine());}}
}

运行结果:

范例:获取一个classPath文件

其他代码都不用改,只需要改变bean配置就行了。

class="com.Resource.util.ResourceBean">classpath:META-INF/licence.txt">

 

利用了配置文件的方式进行处理的时候,用户关心的只是Resource一个接口的使用,而ResourceLoader接口被spring封装起来了

 

而且最为方便的是,spring允许用户设置资源数组

范例:修改程序类

package com.Resource.util;import java.util.List;import org.springframework.core.io.Resource;public class ResourceList {private List resource;public void setResource(List resource) {this.resource = resource;}public List getResource() {return resource;}
}

测试代码:

package com.Test;
import java.util.Iterator;
import java.util.Scanner;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.Resource;
import com.Resource.util.ResourceList;public class TestResourceList {public static void main(String[] args) throws Exception {ApplicationContext ctx= new ClassPathXmlApplicationContext("applicationContext.xml");ResourceList reb=ctx.getBean("rblist",ResourceList.class); Iterator iter=reb.getResource().iterator();while(iter.hasNext()){Scanner scan=new Scanner(iter.next().getInputStream());scan.useDelimiter("\n");while(scan.hasNext()){System.out.println(scan.nextLine());}System.out.println("**************************");}}
}

 

利用spring读取外部文件资源,它的设计比直接使用IO更加容易

 

路径通配符

以上内容有一个问题,就是必须设置完整路径,但是很多时候不能完整设置路径。

例如,在不同目录下都有存在"applicationContext-xxx.xml"命名的结构,要想将其完整的全部读取进来。那么必须考虑到路径通配符使用。

在spring中继续发扬了ANT工具的特征。在这个工具下提供几种符号:

1):“?”:匹配任意的一位字符。例如:“applicationContext-?.xml”表示可以访问“applicationContext-1.xml”或"applicationContext-2.xml"。

2):“ * ”:匹配0个或者多个任意字符。

3):“ **  ”:表示匹配任意的目录,可以是零个,一个或者多个。

但是一旦要进行多个路径的匹配,那么返回的内容一定是多个,此时就只能利用ResourceLoader的子接口完成读取。可以使用的

子类:PathMatchingResourcePatternResolver

范例:读取资源文件

为了测试,建了两个目录:

在spring里面,目录的访问不再成为限制。

package com.Resource.Demo;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
public class ClassPathResourceLoader {public static void main(String[] args) throws Exception {ResourcePatternResolver loader=new PathMatchingResourcePatternResolver();Resource[] resource=loader.getResources("classpath:com/msg/**/applicationContext?.xml");for(int i=0;i){System.out.println("文件名称"+resource[i].getFile()+",数据长度:"+resource[i].contentLength());}}
}

1,注意loader对象的类不再是ResourceLoader。

2,注意获取资源的方法是,getResources,比之前多了一个s。

3,resource对象是一个数组。

3,获取资源的目录:getFile,获取资源名称,getFilename。

运行结果:

文件名称D:\Myeclipse\document\SpringResource\WebRoot\WEB-INF\classes\com\msg\applicationContext2.xml,数据长度:764
文件名称D:\Myeclipse\document\SpringResource\WebRoot\WEB
-INF\classes\com\msg\demo\applicationContext2.xml,数据长度:764

 



推荐阅读
  • Spring框架《一》简介
    Spring框架《一》1.Spring概述1.1简介1.2Spring模板二、IOC容器和Bean1.IOC和DI简介2.三种通过类型获取bean3.给bean的属性赋值3.1依赖 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • springmvc学习笔记(十):控制器业务方法中通过注解实现封装Javabean接收表单提交的数据
    本文介绍了在springmvc学习笔记系列的第十篇中,控制器的业务方法中如何通过注解实现封装Javabean来接收表单提交的数据。同时还讨论了当有多个注册表单且字段完全相同时,如何将其交给同一个控制器处理。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • WhenIusepythontoapplythepymysqlmoduletoaddafieldtoatableinthemysqldatabase,itdo ... [详细]
  • Spring学习(4):Spring管理对象之间的关联关系
    本文是关于Spring学习的第四篇文章,讲述了Spring框架中管理对象之间的关联关系。文章介绍了MessageService类和MessagePrinter类的实现,并解释了它们之间的关联关系。通过学习本文,读者可以了解Spring框架中对象之间的关联关系的概念和实现方式。 ... [详细]
  • SpringMVC接收请求参数的方式总结
    本文总结了在SpringMVC开发中处理控制器参数的各种方式,包括处理使用@RequestParam注解的参数、MultipartFile类型参数和Simple类型参数的RequestParamMethodArgumentResolver,处理@RequestBody注解的参数的RequestResponseBodyMethodProcessor,以及PathVariableMapMethodArgumentResol等子类。 ... [详细]
  • 本文介绍了使用Spark实现低配版高斯朴素贝叶斯模型的原因和原理。随着数据量的增大,单机上运行高斯朴素贝叶斯模型会变得很慢,因此考虑使用Spark来加速运行。然而,Spark的MLlib并没有实现高斯朴素贝叶斯模型,因此需要自己动手实现。文章还介绍了朴素贝叶斯的原理和公式,并对具有多个特征和类别的模型进行了讨论。最后,作者总结了实现低配版高斯朴素贝叶斯模型的步骤。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Android开发实现的计时器功能示例
    本文分享了Android开发实现的计时器功能示例,包括效果图、布局和按钮的使用。通过使用Chronometer控件,可以实现计时器功能。该示例适用于Android平台,供开发者参考。 ... [详细]
author-avatar
小米和南瓜
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有