在前面章节有童鞋提到过 关于配置文件 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. 09、win32 转换为 store app

    1.机制: 微软的 Project Centernial ( Project C) 项目的就是把传统的 windows桌面应用程序 转换为 windows10 store app (appx). 目的 ...

  2. 【转】10张图带你深入理解Docker容器和镜像

    [转自]:http://dockone.io/article/783 待续

  3. LeetCode: Letter Combinations of a Phone Number 解题报告

    Letter Combinations of a Phone Number Given a digit string, return all possible letter combinations ...

  4. FreeRTOS 事件标志组

    以下转载自安富莱电子: http://forum.armfly.com/forum.php 为什么要使用事件标志事件标志组是实现多任务同步的有效机制之一.也许有不理解的初学者会问采用事件标志组多麻烦, ...

  5. windows 批处理-重命名

    从数字1递增批量重命名ren.bat: @echo off SETLOCAL ENABLEDELAYEDEXPANSION set /A num= FOR /F "tokens=*" ...

  6. calloc内存分配函数

    calloc是一个C语言函数 函数名: calloc void *calloc(unsigned n,unsigned size): 功 能: 在内存的动态存储区中分配n个长度为size的连续空间,函 ...

  7. IIS安全加固

    1 删除IIS默认站点 把IIS默认安装的站点删除或禁用掉. 2 禁用不必要的Web服务扩展 打开IIS 管理器,检查是否有不必要的“Web服务扩展”,如果有则禁用掉.如下图所示: 3 IIS访问权限 ...

  8. 通过SiteMapDataSource动态获取SiteMap文件进行权限设置

    最近做一个用ASP.NET做一个小项目,用户不是很多,功能不算太复杂,但是做到权限控制的时候有点犯难,这么一个小系统如果全部做一个大的复杂的权限控制觉得成本不划算,打算用Treeview ,根据不同的 ...

  9. 【Unity/Kinect】Kinect一些常用的API

    先开好这个坑,之后用到就补充,方便回顾. 获取用户相对Kinect传感器设备的位置坐标.(在Kinect坐标系中的位置) public Vector3 GetUserPosition(Int64 us ...

  10. windows server 2008 域控安装

    windows server 2008 域控安装:1.dns安装,安装过程会提示.net frame 3.51安装 3.域控安装 原文:地址 http://wenku.baidu.com/link?u ...