在前面一章我们介绍了依赖注入,控制反转的概念,以及自己动手搭建了一下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 如何管理您的类___对象、对象工厂和应用程序上下文的更多相关文章

  1. 第四章 Spring.Net 如何管理您的类___自定义对象行为

    Spring.Net 一直讲求 ” 配置应用程序“,有一种需求在实际开发中不太常用,却非常有用 -> 配置对象的行为,Spring.Net 也能够完美的实现.Spring.Net 通过几个专门的 ...

  2. 第四章 Spring.Net 如何管理您的类___让对象了解自己的容器

    我们在开发中,经常需要让对象了解自己所在的容器的信息,例如,有时我们需要让对象知道,对象所在容器的引用是什么,或者是对象在容器中的名称是什么 .Spring.Net 中提供了两个接口,我们使用这两个接 ...

  3. 第四章 Spring.Net 如何管理您的类___对象的手动装配

    前面我们知道了什么是对象,什么是对象工厂,什么是应用程序上下文.这一次我们来看一下对象的装配. Spring.Net 中有多种装配对象的方式,装配这个词可能比较学术化,我们可以理解为对象的创建. Sp ...

  4. 第四章 Spring.Net 如何管理您的类___对象的自动装配

    由于这几天都比较忙,所以对笔记暂时没有更新. Spring.NET具有自动装配的能力,也就是说,Spring.NET可以通过对象的定义自动分辨某个对象的协作对象.自动装配是针对单个对象(按:针对每个协 ...

  5. 第四章 Spring.Net 如何管理您的类___统一资源访问接口

    在前面章节有童鞋提到过 关于配置文件 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容,接下来就详细介绍一下 IResource 接口. IResource 接口 ...

  6. 第四章 Spring.Net 如何管理您的类___对象的生命周期链

    各位,实在不好意思,因为有事,博客几天没更新了.前面有童鞋提到,配置 Objects.xml 路径的相关问题,这些东西是 IResource 接口的一些内容.在下一章会详细介绍. 传统的Net应用中, ...

  7. 第四章 Spring.Net 如何管理您的类___对象的作用域

    Spring.Net 中对象的作用域,就是描述对象的部署模式 ,Spring.Net 中对象可以通过两种模式布署: ① singleton(单例模式) ② 非singleton 也叫非单例模式(或者叫 ...

  8. 第四章 Spring.Net 如何管理您的类___对象的初始化方式

    在 Spring.Net 中对象初始化的方式分为两种: ① 急切实例化,也就是说 Spring.Net 容器初始化的时候将对象先实例化出来. ② 延迟实例化,也就是说我们在调用 GetObject 方 ...

  9. 第四章 Spring.Net 如何管理您的类___IObjectPostProcessor接口

    官方取名叫 对象后处理器 (object post-processor) , 听起来很高级的样子啊!实际上就是所有实现了这个接口的类,增加了两个方法. Spring.Objects.Factory.C ...

随机推荐

  1. ny714 Card Trick

    Card Trick 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 The magician shuffles a small pack of cards, holds ...

  2. iOS登录单例

    iOS登录单例 一,工程图. 二,代码. UserInfo.h #import <Foundation/Foundation.h> @interface UserInfo : NSObje ...

  3. 使用python的email、smtplib、poplib模块收发邮件

    使用python的email.smtplib.poplib模块收发邮件 一封电子邮件的旅程是: MUA:Mail User Agent——邮件用户代理.(即类似Outlook的电子邮件软件) MTA: ...

  4. Spark RDD、DataFrame和DataSet的区别

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   转载请标明出处:小帆的帆的专栏 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类 ...

  5. 回调形成树形结构tree

    //Tree.vue <template> <li> <span @click="toggle"> <i v-if="isFol ...

  6. Sql Server连接字符串

    SQL Server .NET Data Provider 连接字符串包含一个由一些属性名/值对组成的集合.每一个属性/值对都由分号隔开.          PropertyName1=Value1; ...

  7. Eclipse打开javadoc框

    Window->Show View->Other->Java->Javadoc 这样你用鼠标选中一个element就可以在Javadoc tag中显示信息了,而不是那种浮动窗口 ...

  8. C#中一道关于ADO.NET的基础练习题

    在控制台程序中实现以下功能: 1. 构建3个表(程序启动时自动建立)  (20分): 1) Employee 职工表 (工号.姓名.性别.年龄.部门)  (Num.Name.Sex.Age.Depar ...

  9. 【Unity笔记】将角色的碰撞体朝向鼠标点击方向——角色朝向鼠标

    int floorMask; // 自动寻路层 void Awake() { floorMask = LayerMask.NameToLayer("Floor"); } void ...

  10. java虚拟机和Dalvik虚拟机

    java虚拟机和Dalvik虚拟机的区别: java虚拟机Dalvik虚拟机 java虚拟机基于栈. 基于栈的机器必须使用指令来载入和操作栈上数据,所需指令更多更多dalvik虚拟机是基于寄存器的 j ...