spring.net 框架分析(一)对象的创建

  对象实例的创建是IOC实现的核心之一。

  下面我们来分析下Spring.net是如何创建一个对象的。

  一.我们先建立一个简单的测试程序,程序通过Spring.net架构创建一个对象。

   首先我们建立一个控制台程序,加入一个类:TestClass 代码如下:

 

  然后加入一个XML配置文件objects.xml

 

 

最后修改Program.cs为如下:

 

运行程序:TestClass 被创建

二、分析程序

     我们从程序的运行一步一步分析。

   首先程序取得配置文件资源

  IResource resource = new FileSystemResource("objects.xml");

  通过FileSystemResource读取 objects.xml 文件中的配置,形成资源。

        IObjectFactory  objectfactory = new XmlObjectFactory(resource);

  然后建立一个XmlObjectFactory对象工厂,并把xml配置给它。

object o=objectfactory.GetObject("TCOject");

  最后建立对象,前面两步准备工作,取得对象的配置,只有这一步才是真正的创建对象实例。

三、深入分析

   我们先来看下资源相关类。

image

  这是资源管理类图(部分),IResource接口位于Spring.Core.IO命名空间中,可以用统一的方式描述和访问不同类型的资源。通过该接口,可以用类似多态的、与协议无关的方式处理文件和URL资源——.NET的FCL中没有具备这些功能的接口。IResource接口继承自IInputStream接口,后者只有一个属性:Stream InputStream,IResource又其基础上添加了一系列属性用来描述资源的信息。

我们可以看出 IResource resource = new FileSystemResource("objects.xml"); 这句话只是把objects.xml文件读出来形成数据流。

下面我们来看创建实例用到的类:

image

IObjectFactory是初始化、配置及管理对象的实际容器(按:它是所有容器的父接口)。对象间通常会相互协作,我们也可以说它们相互间具有依赖性。这些依赖性通过IObjectFactory的配置数据反映出来。(但某些依赖性从配置数据中是看不到的,比如运行时对象之间的方法调用。)

我们用到的XmlObjectFactory就继承了IObjectFactory。它的构造函数需要IResource 的一个实例。

在看看object o=objectfactory.GetObject("TCOject"); GetObject方法是在类AbstractObjectFactory中实现的。而getobject会通过InstantiationStrategy最终建立这个对象。有兴趣可以通过源码跟踪整个建立过程。

四、性能

  通过一个测试,用spring.net建立对象比直接new一个对象要慢20倍,但是由于new 一个简单对象所花时间很少。10000次也只需要6毫秒,而用spring.net要113毫秒。也就是说建立一个对象spring.net大约多用0.0107毫秒,即使大量建立对象,我们也不会对这个影响有感觉。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值