第四章 Spring.Net 如何管理您的类___统一资源访问接口
在前面章节有童鞋提到过 关于配置文件 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 的 面向方面编程,以及事务的知识。