第四章 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 ...
随机推荐
- 07、在 Windows10 上获得屏幕分辨率
因为在 win10 上,app 在运行的时候,默认不是占满全屏幕,并且 windows runtime 当前没有提供获取 屏幕尺寸的 api.在桌面 win32 api 中,可以获取屏幕尺寸,不过因为 ...
- ubuntu16.04中文乱码解决方案
把环境变量设置为中文 </pre><pre name="code" class="plain">sudo vi /etc/default ...
- shell替换掉两个以上的空格
方法一:sed 's/ \+/ /g' test.txt > test1.txt
- eclipse 安装插件的几种方式
eclipse 安装插件的几种方式 1.使用url在线安装 ,最方便最快捷 help - install new software 接下来就是同意协议之类的,next ne ...
- Java程序员应该了解的10个设计原则
引用: http://www.cnblogs.com/leehongee/archive/2012/03/18/2404760.html 面向对象设计原则是OOPS(Object-Oriented P ...
- 【Unity】计时器
看了好些方法,终于找到一个超级好用的计时器,立马转载马住了! http://www.gimoo.net/t/1602/56bfcc8a26757.html 运行效果如下: 思路:记录当前游戏时间然后进 ...
- STM32F10x_ADC三通道逐次转换(单次、单通道软件触发)
Ⅰ.概述 本文讲述关于STM32功能比较强大的ADC模块.ADC(Analog to Digital Converter)也就是模拟量转化为数字量,而STM32的ADC模块功能比较多,本文主要讲述“三 ...
- Yii 中Criteria常用方法
$criteria = new CDbCriteria; //select $criteria->select = '*';//默认* $criteria->select = 'id,na ...
- JetBrains PyCharm 4.0.4 key
用户名 yueting3527 注册码 ===== LICENSE BEGIN ===== 93347-12042010 00001FMHemWIs"6wozMZnat3IgXKXJ 2!n ...
- html中的label配合checkbox,redio用法
<input id="a1" type="checkbox" name="a" value="33023" /&g ...