在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口。

  IResource 接口 位于Spring.Core.IO 命名空间下,它能够使用统一的方式描述和访问不同类型的资源。通过该接口可以使用类似多态,与协议无关的方式来处理文件和URI资源。IResource 接口继承自 IInputStream 接口,后者只有一个属性: Stream InputStream , IResource 又在其基础上添加了一系列属性用来描述资源的信息。

  如图,可以看到 IResource 接口:

IResource 接口的属性和方法:
InputStream  : 继承自 IInputStream 接口。打开并返回一个 System.IO.Stream 。每次读取都会返回新的 Stream ,调用者必须负责 Stream 的关闭工作。

Exists  : 检查资源是否存在,如果不存在就返回 false 。

IsOpen  : 返回一个布尔值,以表明该资源是否是一个已经打开的流。如果是 true ,则 InputStream 属性不能多次读取,只能是读取一次然后关闭,以防资源泄露。 IResource 接口的实现类,除了 InputStreamResource ,其他都应该将属性返回 false 。

Description  : 返回对资源的描述,比如说完整的文件名或实际的 URL 。

Uri  : 资源的 Uri 表示形式。

File : 如果资源可以被解析为一个绝对的文件路径,就返回一个 System.IO.FIleInfo 。

CreateRelative(string relativePath); 方法   :  使用类似于相对路径的字符串(./和../),创建与当前资源相关的资源。

  IResource 是一个接口,在 Spring.Net 中有几个常用的实现类,我们可以用这些实现类来进行一些操作:

AssemblyResource : 用于访问 .Net 程序集中的内嵌式资源,相应的 Uri 格式为: assembly://<AssemblyName>/<NameSpace>/<ResourceName>

ConfigSectionResource : 用于访问 .Net 的应用程序配置文件(如: App.Config )中与 Spring.Net 有关的配置。Uri 格式: config://<path to section>

FileSystemResource : 用于访问文件系统资源。Uri 格式 file://<filename>

InputStreamResource : 用于包装原始的 Stream 。但不支持 Uri 格式。

UriResource : 通过诸如 http 等标准协议的方式访问资源。 Uri 格式为标准协议格式。

  上面这些都是常用的 IResource 接口实现类, 如果有童鞋想要从指定的 Uri 中载入资源,Spring.Net 也提供了一个叫 IResourceLoader 的接口。

  如果要从指定的 Uri 中载入资源,可以使用 Spring.Net 中的 IResourceLoader 接口的实现类。在 Spring.Net 的默认情况下使用的是 ConfigurableResourceLoader,但通常情况下不直接使用它。因为 IApplicationContext 接口实现了 IResourceLoader 接口 。IResourceLoader 接口中只有一个方法

IResource GetResource(string location);

IApplicationContext 将 GetResource方法委托给 ConfigurableResourceLoader 类代理,可以支持上面列出的全部 Uri 。

  通过创建新的 IResource 实现类可以注册新的协议,但值得注意的是:要保证新类能够正确解析 Uri 字符串 ,比如 去解析一个不存在或者错误的 Uri 时,会抛出异常。

到此位置,Spring.Net 已经写了好几章了,基本上 Spring.Net 扫盲阶段就差不多到此为止。感谢支持我的朋友,在接下来的章节中,会介绍 Spring.Net 的 面向方面编程,以及事务的知识。

第四章 Spring.Net 如何管理您的类___统一资源访问接口的更多相关文章

  1. 第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文

    在前面一章我们介绍了依赖注入,控制反转的概念,以及自己动手搭建了一下Spring.Net的环境.通过这些操作,我们知道了Spring.Net 的核心是使用依赖注入或控制反转这种思想来管理业务对象,降低 ...

  2. 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器

    我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 .Spring.Net 中提供了两个接口,我们使用这两个接 ...

  3. 第四章 Spring.Net 如何管理您的类___对象的生命周期链

    各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中, ...

  4. 第四章 Spring.Net 如何管理您的类___对象的手动装配

    前面我们知道了什么是对象,什么是对象工厂,什么是应用程序上下文.这一次我们来看一下对象的装配. Spring.Net 中有多种装配对象的方式,装配这个词可能比较学术化,我们可以理解为对象的创建. Sp ...

  5. 第四章 Spring.Net 如何管理您的类___自定义对象行为

    Spring.Net 一直讲求 ” 配置应用程序“,有一种需求在实际开发中不太常用,却非常有用 -> 配置对象的行为,Spring.Net 也能够完美的实现.Spring.Net 通过几个专门的 ...

  6. 第四章 Spring.Net 如何管理您的类___对象的作用域

    Spring.Net 中对象的作用域,就是描述对象的部署模式 ,Spring.Net 中对象可以通过两种模式布署: ① singleton(单例模式) ② 非singleton 也叫非单例模式(或者叫 ...

  7. 第四章 Spring.Net 如何管理您的类___对象的初始化方式

    在 Spring.Net 中对象初始化的方式分为两种: ① 急切实例化,也就是说 Spring.Net 容器初始化的时候将对象先实例化出来. ② 延迟实例化,也就是说我们在调用 GetObject 方 ...

  8. 第四章 Spring.Net 如何管理您的类___对象的自动装配

    由于这几天都比较忙,所以对笔记暂时没有更新. Spring.NET具有自动装配的能力,也就是说,Spring.NET可以通过对象的定义自动分辨某个对象的协作对象.自动装配是针对单个对象(按:针对每个协 ...

  9. 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口

    官方取名叫 对象后处理器 (object post-processor) , 听起来很高级的样子啊!实际上就是所有实现了这个接口的类,增加了两个方法. Spring.Objects.Factory.C ...

随机推荐

  1. 每日英语:In Digital Era, What Does 'Watching TV' Even Mean?

    We spend a full five hours and 16 minutes a day in front of a screen, and that's without even turnin ...

  2. 每日英语:Some Chinese Students Stay Home to Get Ahead

    Li Shan's oldest son was the perfect candidate to join the throngs of Chinese students studying abro ...

  3. js 学习的地址;

    1.https://github.com/windiest/Front-end-tutorial      2.http://www.w3school.com.cn/tags/html_ref_eve ...

  4. .Net 三层架构开发初步

    写在前面的话:在课堂上只是听老师讲过三层架构,知道大概是什么意思,我的理解就是将本来混合着写在一起的代码按功能性的不同分别写在不同的项目中,然后上层项目调用下层项目提供的接口,这样可以使代码的层次更清 ...

  5. LeetCode 新题: Find Minimum in Rotated Sorted Array 解题报告-二分法模板解法

    Find Minimum in Rotated Sorted Array Question Solution Suppose a sorted array is rotated at some piv ...

  6. tomcat 部署时修改服务器时间

    tomcat 在部署时修改了服务器时间  会出现以下状况 1.session 失效 2.修改的文件不会正确被tomcat热部署进去

  7. C#中一道关于员工信息系统的题(主要考察LinQ和正则表达式验证)

    今天上午进行了公司的C# C level考核,最后一道编程题是关于员工信息系统的,题目的要求大概是这样的:1.要可以保存员工信息(XXXXX),并且要用正则表达式对输入信息进行验证:2.要可以对员工信 ...

  8. C#中关于系统用户信息持久化(接上文)

    首先传几张效果图描述一下功能: 经过上文用户名和密码的验证后,就到了添加用户这一步,登陆后的用户可以添加新的用户,被添加的用户可以登陆系统. 这里会用到C#中的“正则表达式”对用户名格式进行判断,以及 ...

  9. javascript 中mediator pattern(中介者模式)一个实例demo

    <!doctype html> <html lang="en"> <head> <title>JavaScript Patterns ...

  10. eclipse安装使用教程

    eclipse安装使用教程 很多人都知道要用eclipse来做java开发,但很多的新手朋友却不知道怎么下载和安装eclipse. 下面给你介绍一下怎么下载和安装eclipse来用于自己的学习或者项目 ...