`
javatoyou
  • 浏览: 1017992 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Castle IOC容器与Spring.NET配置之比较

 
阅读更多

我本人对于Spring.NET并不了解,本文只是通过一个简单的例子来比较一下两者配置之间的区别。在Castle IOC容器中,提出了自动装配(Auto-Wiring)的概念,即由容器自动管理组件之间的依赖关系,我们无需自己编写XML配置文件来配置组件之间的依赖关系。在Spring.NET中也是支持自动装配的,但是并不推荐使用,它贯穿着一种思想就是一切皆为XML配置,这是两者之间最大的一个区别。

关于自动装配,来自于Spring.NET的支持者认为让容器自动管理,会让我们无法控制组件的依赖关系,如果该为XML配置,可以让我们知道自己在做什么,我们指定了哪些依赖关系,方便进行控制和管理;而来自于Castle IOC的支持者认为如果不让容器自动管理,手工配置会变得非常之复杂,配置文件也会变得非常繁冗,如果系统中的组件非常之多的时候,管理工作会变得很困难。

我们来看一个简单的例子,有这样一个组件MyMainComponent,它依赖于MyComponent1MyComponent2,并且它在构造函数中还需要接收一个整型的参数。

//出处:http://terrylee.cnblogs.com

publicclassMyMainComponent
{
MyComponent1_com1;

MyComponent2_com2;

int_i;

publicMyMainComponent(MyComponent1com1,MyComponent2com2,inti)
{
this._com1=com1;

this._com2=com2;

this._i=i;
}

}


publicclassMyComponent1
{
publicMyComponent1()
{
//
}

}


publicclassMyComponent2
{
publicMyComponent2()
{
//
}

}


如果用采用Spring.NET,它采用XML进行组件之间的连接,配置文件如下,需要在配置文件中指定每一个对象及其它们之间的依赖,同时在配置文件中区分是构造函数还是其他方法:

<!--出处:http://terrylee.cnblogs.com-->

<?xmlversion="1.0"encoding="utf-8"?>

<configuration>

<objectid="myManComponent"class="CastleDemo.MyMainComponent,CastleDemo">

<constructor-arg>

<refobject="mycomponent1"/>

</constructor-arg>

<constructor-arg>

<refobject="mycomponent2"/>

</constructor-arg>

<constructor-arg>

<value>1</value>

</constructor-arg>

</object>

<objectid="mycomponent1"class="CastleDemo.MyComponent1,CastleDemo"/>

<objectid="mycomponent2"class="CastleDemo.MyComponent2,CastleDemo"/>

</configuration>


Castle IOC中同样需要配置文件,但相比之下,就简单了很多:

<!--出处:http://terrylee.cnblogs.com-->

<?xmlversion="1.0"encoding="utf-8"?>

<configuration>

<components>

<componentid="myMainComponent">

<parameters>

<i>1</i>

</parameters>

</component>

</components>

</configuration>


Castle IOC中的配置并不需要指定组件之间的关联,它会自动通过Windsor来处理;我们只是配置了一个参数i,这个iMyMainComponent中的构造函数中不存在依赖关系的那个参数。

//出处:http://terrylee.cnblogs.com

publicclassApp
{
publicstaticvoidMain()
{
IWindsorContainercontainer
=newWindsorContainer(newXmlInterpreter("../../BasicUsage.xml"));

container.AddComponent(
"myMainComponent",

typeof(MyMainComponent));

container.AddComponent(
"myComponent1",

typeof(MyComponent1));

container.AddComponent(
"myComponent2",

typeof(MyComponent2));

}

}

这样添加组件后,

WindsorContainer会自动调用MicroKernel中的ConstructorDependenciesModelInspector来处理组件的构造函数依赖。

通过上面的这个简单例子比较可以看出,如果我们想要增加一个组件之间的依赖关系或者增加一个组件使用Castle要比使用Spring.NET容易很多,Spring.NET复杂的配置文件会给我们开发带来很来不可预料的错误;Castle根据对象的依赖关系,采用自动装配,不需要配置组件的依赖,另外为了符合构造注入和属性注入,Castle的配置文件并没有像Spring.Net那样区分构造函数还是其他的方法,同时直接使用Parameters,而不是使用构造函数参数之类的区分。

参考资料

Castle的官方网站http://www.castleproject.org

分享到:
评论

相关推荐

    [Ioc容器] Spring.NET 1.3.2

    Spring.NET is an open source application framework that makes building enterprise .NET applications easier; Providing components based on proven design patterns that can be integrated into all tiers...

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql://localhost:3306/demo &lt;value&gt;root ...

    spring.net中文手册在线版

    Spring.NET以Java版的Spring框架为基础,将Spring.Java的核心概念与思想移植到了.NET平台上。 第一章 序言 第二章 简介 2.1.概述 2.2.背景 2.3.模块 2.4.许可证信息 2.5.支持 第三章 背景 3.1.控制反转 第...

    Spring.Net演示实例(IOC、AOP、属性注入、构造函数注入、通知过滤器)

    写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了Castle实现IOC及...

    C# Spring.Net演示实例【更新版】(IOC、AOP、属性注入、构造函数注入、通知过滤器)

    写了基于C#使用Spring.Net的演示实例,希望能给有需要的人带来帮助,其中演示了配置下的IOC、AOP、属性注入、构造函数注入、通知过滤器、以及不使用配置直接代码硬编的AOP动态代码过程,另外还增加了Castle实现IOC及...

    Spring.NET学习笔记-实现一个简易的IoC框架

    在我们使用Spring.NET框架的时候,首先需要实例化Spring.NET容器, 然后调用IoC容器IObjectFactory接口中GetObject方法获取容器中的对象。通过这一点就可以告诉我们制作IoC容器需要写一个获取XML文件内容的方法和申明...

    Java-Spring-SpringIoC容器-SpringIoC的学习

    Java-Spring-SpringIoC容器-SpringIoC的学习 SpringIoC容器的学习笔记 主要介绍了IoC容器工作原理以及如何配置IoC容器 通过标签和注解配置容器

    Castle IOC容器详解

    主要内容 1.为什么要IOC 2.什么是Castle IOC容器 3.快速入门示例 4.几个重要的概念

    spring IOC容器依赖注入XML配置

    spring IOC容器依赖注入XML配置详解 运行环境:eclipse 构建工具:maven 不提供maven构建,maven用来解决jar包的依赖

    spring.net demo全

    spring.net AOP应用 IOC注入。

    spring.net依赖注入Demo

    spring.net是为.net开发者提供的一个控制反转操作框架也称作依赖注入。 此demo仅提供参考spring.net mvc+三层

    Spring.net框架

    本部分代码仅仅提供一种功能演示,如果实际应用仍需进一步完善(建议使用一些成型的Ioc框架,例如Spring.net或Castle等)。经过改造后 的系统,组件间依赖关系如下图: 可以看出这次实现了真正的“针对接口编程”...

    Spring源代码解析(一):IOC容器.doc

    Spring源代码解析(一):IOC容器.doc

    Spring.net二----初探IOC容器.rar源代码

    Spring.net二----初探IOC容器.rar

    自己弄的三层框架Spring.net,Remoting

    使用Spring.Net IoC注入数据访问层, 发布为Remoting服务, 供Web层调用. 3, Web 实现UI, 组织数据提交WebService处理. 层与层之间是独立的. 声明: 本框架仅做为个人研究使用, 若有任何问题或因使用产生的任何损失...

    Spring的IoC容器(《Spring揭秘》的精选版)

    迷你书是《Spring揭秘》的精选版,节选了原书中介绍Spring IoC容器的6个章节。《Spring揭秘》以幽默生动的语言、辅以有趣的故事和典故,循循善诱地阐述了Spring框架的方方面面。针对Spring框架的主要功能以及开发者...

    Spring.Net文档

    在使用IoC容器来配置应用程序时,我们既可以用传统的ADO.NET来访问数据库,也可以使用Spring.NET的Hibernate集成代码或ADO.NET抽象层来访问数据库。Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖(或者只...

    Spring.NET-1.3.2

    从Java spring完美移植过来的适合.net的ioc框架

    Spring的IOC容器

    讲的非常不错的Spring书籍,特别有利于对IOC容器的理解,特别推荐哦

Global site tag (gtag.js) - Google Analytics