S书W经
netgod's blog
我的首页
文章
相册
圈子
留言
管理
 
    当前所在页面:首页>>文章>>Spring.NET框架起航之IOC入门篇—初识IOC
Spring.NET框架起航之IOC入门篇—初识IOC
    作者:netgod 来源: 发表时间:2007-12-25

 
 
上一篇文章中的HELLOWORLD示例展示了Spring.NET中IOC的使用方法之一,这里我们简单来描述一下IOC及其作用和IOC容器管理的对象定义、创建。
IOC的全称是Inversion of Control,翻译成中文是控制反转,这个名称会给初学者带来误导,本来很快入门的可能要花更长时间。正因为如此,2004年初有了新的叫法,依赖注入,也就是在需要的时候获得对象实例及其他附加信息.
IOC的一些思想其实大家很早就有,所以掌握Spring.NET IOC并非难事.大家都解过二元方程组吧,有一种解法就是使用代入消元法,比如有一个x和y组成的二元方程,要想解出这个方程组来,先要通过其中一个方程得到x关于y的表达式,然后将这个表达式代入另一个方程中,就得到一个一元方程,这样很容易就得到了结果。在这个过程中,由第一个方程中得到x并代入第二个方程解决问题的方法,正好和Spring.NET IOC容器的注入机制有了几分相似,但Spring.NET IOC是根据xml配置文件中定义的类名来得到对象,实质就是用改进的工厂模式来管理XML中定义的对象,然后用反射机制来生成对象注入的,而且在.Net中修改XML文件来管理注入,实现了真正的即插即用.如果把握住这个实质,掌握Spring.NET IOC就是一件很容易的事情.
到目前我所认识到的Spring.NET IOC带来的好处就是使组件的共享变的很容易.看看Spring.NET IOC容器支持的两种注入方式:
• 构造方法注入
• 设置属性注入
Spring.NET提供的两个主要的IOC容器:
IObjectFactory
IApplicationContext
使用XmlObjectFactory(XmlObjectFactory是IobjectFactory的一个实现)创建容器的例子:
IResource input = new FileSystemResource ("objects.xml");
IObjectFactory factory = new XmlObjectFactory(input);
使用IApplicationContext(IApplicationContext仍然是IObjectFactory的一个实现)创建容器的例子:
IApplicationContext context = new XmlApplicationContext("file://myobjects.xml",
       "assembly://MyAssembly/MyProject/myobjects-dal-layer.xml");
IObjectFactory factory = (IObjectFactory) context;
下面来了解Spring.NET IOC容器的对象的构成及定义:
一个对象定义包含以下信息:
1.对象类型,即所定义对象的实际类型
2.对象行为,用来规定对象在IoC容器中的行为(例如,是否布署为singleton,自动装配的模式,依赖检查的模式,初始化和销毁方法等)
3.对象创建后要设置的属性值。例如,一个线程池管理对象的可用线程数,或者用来创建线程池的类型信息,都可以通过属性或构造器参数进行设置
4.对象所需要的其它对象,例如一个对象的协作对象(同样可通过属性或构造器设置)。这些对象也可以叫做依赖项
对象定义和其具体内容对应如下:
对象类型                                         对象的创建 
id和name                                        对象标识符(id和name) 
singleton或prototype                    Singleton和Prototype 
对象属性                                         设置对象的属性和协作对象 
构造器参数                                     设置对象的属性和协作对象 
自动装配模式                                 自动装配协作对象 
依赖检查模式                                 检查依赖项 
初始化方法                                     生命周期接口 
销毁(destruction)方法                  生命周期接口 
 
对象定义的位置可以在.net的标准应用程序配置或者自定义的XML文件中,定义为如下片段:

<objects xmlns="http://www.springframework.net"

  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

  xsi:schemaLocation="http://www.springframework.net

         http://www.springframework.net/xsd/spring-objects.xsd">

  <object id="..." type="...">

  ...

  </object>

  <object id="...." type="...">

  ...

  </object>

  ...

</objects>

 

对象的创建:

1.       通过构造方法创建:

<object id="myObject" type="Myapp.Myobject, MyappLibrary"/>

其中定义了一个名为myObject的对象,类型是Myapp中的Myobject,位置在MyappLibrary

如果在类型Myobject中还嵌套定义了类型Car,则定义如下:

<object id="myObject" type="Myapp.Myobject+Car, MyappLibrary"/>

2.       通过静态工厂方法创建对象

<object id="myObject" type="Myapp.MyobjectFactory,MyappLibrary" factory-method=”staticfactoryMethod”/>

其中的staticfactoryMethod要求为静态工厂方法

3.       实例工厂方法创建对象

<object id="myObject" factory-method="CreateInstance"

factory-object="myFactory"/>

这里就不需要type指定类型,而是借助factory-object来进行对象的依赖注入

4.       泛型对象的创建

跟上面相似,要注意的细节是表示泛型的左尖括号<要替换成字符串“&lt;”

 
 
在这里简述了Spring.NET IOC机制及其管理的对象的创建和配置,更多关于IOC的内容请继续关注本人BLOG。
 
 

(阅读 )   评论数(:0)
评论】 【收藏】
评论:共0条

发表评论:
发表人:
评论: 
    
 
关于我们 | 诚聘英才 | 联系我们 | 广告业务 | 网站地图 | 法律声明

EasyJF开源团队版权所有  建议使用1024*768分辨率