第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文
在前面一章我们介绍了依赖注入,控制反转的概念,以及自己动手搭建了一下Spring.Net的环境。通过这些操作,我们知道了Spring.Net 的核心是使用依赖注入或控制反转这种思想来管理业务对象,降低程序的依赖耦合。这一次的笔记,就是来了解一下,Spring.Net 如何管理我们的类。
4.1 对象,对象工厂和应用程序上下文介绍
在前面的章节,我们曾稍微提到过关于对象,对象工厂和应用程序上下文。我们也知道了可以用这些接口来管理对象,接下来会详细介绍他们。
Spring.Core 程序集是Spring.Net的IOC容器管理对象的基础,在Spring.Core程序集中提供了IObjectFactory,IApplicationContext和IObjectDefinition接口来帮助我们进行对象管理。
IObjectFactory接口为Spring.Net 提供了一种高级的配置机制,可用Xml,txt等等很多类型的文件来任意配置对象的信息。
IApplicationContext接口则扩展了IObjectFactory,并增加了面向切面编程(AOP)和消息资源处理等等的功能。
简单的说,IObjectFactory接口提供了配置框架的基本功能,IApplicationContext接口又在其基础上扩展了许多企业级功能。可以说IApplicationContext就是IObjectFactory的超集,它具备了IObjectFactory所有的功能和行为。
4.2 IObjectFactory和IApplicationContext对比
IObjectFactory 是初始化,配置和管理对象的真正容器,实际上所有的扩展容器都是实现了IObjectFactory接口,比如我们前面提到过的Spring.Objects.Factory.Xml.XmlObjectFactory类也是实现了IObjectFactory接口的。各个对象之间常常都会相互协作,也就是说他们相互具有依赖性。这些依赖关系我们可以通过IObjectFactory的配置反应出来。(注:有些配置是看不到的,比如运行时期对象之间方法的调用等。)

(上图是:IObjectFactory的定义)

(上图是:IApplicationContext的定义)
可以看到,Spring.Context.IApplicationContext是实现了IObjectFactory接口的,IObjectFactory的派生类有很多很多,这里最常用的只有几个,不常用的这里就不一一介绍了。如有感兴趣的朋友可以详细了解。

(上图是 IObjectFactory的派生接口或者派生类)
我们前面提到IApplicationContext接口是IObjectFactory的超集,在实际开发中,我一般都会使用IApplicationContext来作为Spring.Net 依赖注入的容器。
4.3 对象的定义
前面我们一直提Spring.Net 管理对象,却一直没有说过如何定义对象。在Spring.Net 容器中我们常常使用Xml文件来定义对象,虽然txt等等的文件类型也可以定义对象。但在这里我只记录了常用的Xml文件来定义对象。如CnblogLesson_3_3中的Object.xml 就是我们用来定义对象的Xml文件。
1 <?xml version="1.0" encoding="utf-8" ?>
2 <objects xmlns="http://www.springframework.net">
3 <object id="readerDal" type="CnblogLesson_3_3.ReaderDAL,CnblogLesson_3_3">
4 </object>
5 </objects>
所有对象的父节点都是objects标签,xmlns属性表示它是属于Spring.Net 的配置文件(这个属性必须给上,否则Spring.Net的解析器不认识),objects标签下面可以有一个或者多个object标签。
Id表示这个对象的编号,我们通过这个id就可以获取到这个对象。如:
1 //通过IApplicationContext来配置
2 IApplicationContext context = ContextRegistry.GetContext();
3 dal = (IReaderDAL)context.GetObject("readerDal");
type表示这个对象的类型,一般用type=”类的全名称,命名空间名称”来表示。
如:type="CnblogLesson_3_3.ReaderDAL,CnblogLesson_3_3"
其中他们的属性有很多,在这小节只介绍两个(id,type),剩下的属性在下面的章节会一一为大家介绍。
本节笔记可能写得有点啰嗦,但是只有一个简单目的,就是让人理解到Spring.Net 容器(包括IApplicationContext,IObjectFactory)与对象之间的作用,以及它们三者之间究竟有着何种关系。
第四章 Spring.Net 如何管理您的类___对象、对象工厂和应用程序上下文的更多相关文章
- 第四章 Spring.Net 如何管理您的类___自定义对象行为
Spring.Net 一直讲求 ” 配置应用程序“,有一种需求在实际开发中不太常用,却非常有用 -> 配置对象的行为,Spring.Net 也能够完美的实现.Spring.Net 通过几个专门的 ...
- 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器
我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 .Spring.Net 中提供了两个接口,我们使用这两个接 ...
- 第四章 Spring.Net 如何管理您的类___对象的手动装配
前面我们知道了什么是对象,什么是对象工厂,什么是应用程序上下文.这一次我们来看一下对象的装配. Spring.Net 中有多种装配对象的方式,装配这个词可能比较学术化,我们可以理解为对象的创建. Sp ...
- 第四章 Spring.Net 如何管理您的类___对象的自动装配
由于这几天都比较忙,所以对笔记暂时没有更新. Spring.NET具有自动装配的能力,也就是说,Spring.NET可以通过对象的定义自动分辨某个对象的协作对象.自动装配是针对单个对象(按:针对每个协 ...
- 第四章 Spring.Net 如何管理您的类___统一资源访问接口
在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...
- 第四章 Spring.Net 如何管理您的类___对象的生命周期链
各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中, ...
- 第四章 Spring.Net 如何管理您的类___对象的作用域
Spring.Net 中对象的作用域,就是描述对象的部署模式 ,Spring.Net 中对象可以通过两种模式布署: ① singleton(单例模式) ② 非singleton 也叫非单例模式(或者叫 ...
- 第四章 Spring.Net 如何管理您的类___对象的初始化方式
在 Spring.Net 中对象初始化的方式分为两种: ① 急切实例化,也就是说 Spring.Net 容器初始化的时候将对象先实例化出来. ② 延迟实例化,也就是说我们在调用 GetObject 方 ...
- 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口
官方取名叫 对象后处理器 (object post-processor) , 听起来很高级的样子啊!实际上就是所有实现了这个接口的类,增加了两个方法. Spring.Objects.Factory.C ...
随机推荐
- 10、Windows10 上,在窗口左侧向右滑动打开 SplitView 的 Pane面板
昨天想在 uwp 上实现,在 SplitView 控件的左侧,通过手指滑动打开 SplitView 的 Pane 面板, 而不仅仅是通过 “汉堡按钮” 点击打开. 在 stackoverflow 看到 ...
- 旋转加载loading和点点加载loadingdemo
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- u-boot编译
u-boot目的:启动内核1.从flash读出内核,放到SDRAM中2.启动内核 u-boot要实现的功能:-----硬件相关的初始化---- ---开发的功能--------- 关看门够 ...
- 初始化git linux上传文件常见问题
SSH生成id_rsa, id_rsa.pub后,连接服务器却报: Agent admitted failure to sign using the key 错误. 解决方法: 在当前用户下执行命令: ...
- Makefile 7——自动生成依赖关系 三颗星
后面会介绍gcc获得源文件依赖的方法,gcc这个功能就是为make而存在的.我们采用gcc的-MM选项结合sed命令.使用sed进行替换的目的是为了在目标名前加上“objs/”前缀.gcc的-E选项, ...
- centos修改ip mac等
CentOS修改mac http://www.haowlan.com/jishuluntan/488.html CentOS 修改IP地址, DNS, 网关 http://www.21andy.com ...
- jquery实现的个人中心导航菜单
之前为大家介绍了一款jquery和css3实现的很酷的菜单导航.这是一款由jquery开发的导航菜单.适合放在门户网站的个人用户中心后台.效果和美观都非常不错.我们先一起看看效果图: 在线预览 源 ...
- Winform 加密连接字符串“未能提供RsaProtectedConfigurationProvider加密,对象已存在”的解决方案
当一台机器已安装软件,并有新用户需要使用此软件时提示“未能提供RsaProtectedConfigurationProvider加密,对象已存在”. 这是因为加密模式是用户模式,需要运行以下脚本添加新 ...
- buildroot 搭建ftpd 服务器记录
vsftpd 搭建失败,应该是buildroot 文件系统还有操作没有理解透,还需要不断的学习. 所以用轻量级的 ftpd 进行替代, 步骤如下: // ---> make busybox-me ...
- Android——RadioGroup和CheckBox
xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android= ...