在前面章节有童鞋提到过 关于配置文件 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. hive 启动 Specified key was too long; max key length is 767 bytes解决办法

    解决方案: 在mysql机器的上命令行中运行: alter database hivemanual character set latin1; 问题解决.

  2. java 读取execl文件

    java 中读取execl文件是必要功能,下面说下几种读取方式 1.jxl   (支持2003 不支持 2007  貌似最新版支持) /**    * 规则设置的模板导入    * @param fi ...

  3. SharePoint自动化系列——通过PowerShell创建SharePoint Site Collection

    通过PowerShell创建SharePoint Site Collection,代码如下: Add-PSSnapin microsoft.sharepoint.powershell function ...

  4. Linux基础之 ---目录结构

    类Unix系统目录结构ubuntu没有盘符这个概念,只有一个根目录/,所有文件都在它下面/ 根目录bin //系统可执行程序,如命令boot //内核和启动程序,所有和启动相关的文件都保存在这里gru ...

  5. ios开发之修改 UITableview 滚动条颜色的方法

    UITableview 的滚动条默认颜色是黑色的,如果 UItableview 背景也是深颜色,则滚动条会变的很不明显.您可以用下面这行代码来改变滚动条的颜色 self.tableView.indic ...

  6. 4款基于html5 canvas充满想象力的重力特效

    今天给大家分享4个物理和重力实验,用来展示 html canvas 的强大.几年前,所有这些实验都必须使用 Java 或 Flash 才能做.在下面这些惊人的例子中,就个人而言,我比较喜欢仿真布料的那 ...

  7. sublime 设置侧边栏颜色

    Sublime Text 2 编辑器: Ctrl+` 输入安装代码,安装package control 插件 ctrl+shift+P : Package install 为什么装不上了呢?出现了什么 ...

  8. DDD CQRS和Event Sourcing的案例:足球比赛

    在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球比赛football Match为案例说明传统编程方法和CQRS的 ...

  9. C语言 · 运用结构体的排序方法

    之前遇到排序只想着最原始的方法,诸如冒泡,选择,快速排序等等,刚刚跟大牛学会了结构体的方法来排序,这样的话以后再也不用怕成绩统计.名次排序之类的题目了. 首先头文件(基于大牛的方法,本人之后做题喜欢引 ...

  10. C语言 · 素数求和

    算法提高 素数求和   时间限制:1.0s   内存限制:256.0MB      问题描述 输入一个自然数n,求小于等于n的素数之和 样例输入 2 样例输出 2 数据规模和约定 测试样例保证 2 & ...