第四章 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 ...
随机推荐
- js实现类似新闻条目人物简介不间断的滚动
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 锁与theadLocal的合并使用
); , TimeUnit.); ){ , TimeUnit.); ){ ); infoPO.setRemainAmount(infoPO.getRemainAmount()-amount); bas ...
- poi 抽取execl表面数据源代码工具
开发中 ,导入导出execl避免不了数据类型格式的校验,在使用poi要使用抽取表面数据,poi暂时不支持单元格抽取,查询poi源码抽取工具类如下,如使用jxl就不必使用,jxl取出的单元格数据已是抽取 ...
- PowerShell实现基于SharePoint的网站HomePage Auto-Configure Solution
Home Page Web Parts Auto-Configuration PS:该项目为公司项目,我还是给他的名字屏蔽掉吧,这是我用PowerShell写的一个自动化升级工具,此为三部自动化工具的 ...
- JavaScript高级 面向对象(5)--最简单的继承方式,混入mix
说明(2017.3.30): 1. 最简单的继承方式,混入mix <!DOCTYPE html> <html lang="en"> <head> ...
- 一款javascript实现的超炫的下拉选择框
今天为给大家带来一款javascript实现的超炫的下拉选择框.下拉的列表由半用透明的幽灵按钮组成.显示下拉的时候,列表项由左右两侧飞入.消息时飞向左右两侧.一起看下效果图 在线预览 源码下载 实 ...
- 判断list为空的条件
if(list!=null&&!list.isEmpty()){ hql.append(" and (status = ? or sta ...
- Ubuntu-Python2.7安装 scipy,numpy,matplotlib 和pip
一. scipy,numpy,matplotlib sudo apt-get install python-scipy sudo apt-get install python-numpy sudo a ...
- [转自setting]神奇的jQuery
前言 之前的项目也一直都是在用jQuery,遇到问题就翻翻API,也从来没有进行过比较系统的总结和整理.最近由于要做个培训,因为比较系统的归纳了一下javascript的相关知识,顺手做个笔记.说到j ...
- Convolutional Neural Networks on Graphs with Fast Localized Spectral Filtering
Defferrard, Michaël, Xavier Bresson, and Pierre Vandergheynst. "Convolutional neural networks o ...