企业开发框架NHibernate和Spring.Net简介-2
企业开发框架NHibernate和Spring.Net简介-2
2008-03-24 13:58
1.5.3 Spring.Net介绍 Spring框架由一个容器,一个配置和组织组件的框架,和一组内置的为事务、持久化和Web用户接口提供的服务组成。Spring.Net是一个关注于.NET企业应用开发的应用程序框架,它能够提供非常丰富的功能,例如依赖注入(Dependency Injection),面向方面编程(Aspect Oriented Programming),数据访问抽象以及ASP.NET集成等。Spring.NET脱胎于Java的Spring框架,其1.0版包括了一个功能完整的反转控制容器和AOP函数库,在后续的版本中将包含对ASP.NET、Remoting和数据访问的支持。Spring.Net的框架如图1-53所示。 ![]() 图1-53 Spring.Net的框架图
1.控制反转
IoC是近年来兴起的一种思想,主要是协调各组件间相互的依赖关系,同时大大提高了组件的可移植性,组件的重用机会也变得更多。在传统的实现中,由程序内部代码来控制程序之间的关系。我们经常使用new关键字来实现两组键间关系的组合,这种实现地方式会造成组件之间耦合(一个好的设计,不但要实现代码重用,还要将组件间关系解耦)。IoC很好地解决了该问题,它将实现组件间关系从程序内部提到外部容器,也就是说由容器在运行期将组件间的某种依赖关系动态注入组件中。
AInterface a = new AInterfaceImp();
AInterfaceImp是接口AInterface的子类,Ioc模式可以根据需要延缓接口的实现,有个比喻:接口如同空的模型套,在必要时向模型套注射石膏,成为一个模型实体。可以人为控制接口的实现完成“注射”。
IoC的实现方式有以下几种:
![]() ![]() ![]() 下面通过简单的例子分别介绍上述几种实现方式。
(1)Type-1。基于接口的设计方法通常是利用接口将调用者与实现者分离。
#001 public class Sport {
#002 private InterfaceBall ball; //InterfaceBall是定义的接口
#003 public void init() {
#004 //Basketball实现了InterfaceBall接口
#005 ball = (InterfaceBall) Class.forName("Basketball").newInstance();}
#006 }
Sport类在编译期依赖于InterfaceBall的实现,为了将调用者与实现者分离,可以动态生成Basketball类并将其强制类型转换为InterfaceBall。
(2)Type-2。基于设值的设计方法是通过在类中暴露setter方法来实现依赖关系。
#001 public class Sport {
#002 private InterfaceBall _ball;
#003 public InterfaceBal1 ball
#004 {
#005 set{ _ball = value ;} }
#006 }
Spring.NET就是实现了该类型的轻量级容器。
(3)Type-3。通过构造方法完成依赖关系。
#001 public class Sport {
#002 private InterfaceBall ball;
#003 public Sport(InterfaceBall arg) {
#004 ball = arg; }
#005 }
由于Type-3在构造期就形成了对象的依赖关系,所以对对象的重用变得困难。有些框架需要组件提供一个默认的构造方法,此时就显现出Type-3的局限性。通常所有的参数都是通过构造方法注入的,当对象间的依赖关系较多时,构造方法就显得比较复杂,不利于单元测试。PicoContainer就是实现了Type-3依赖注入模式的轻量级容器。
2.Spring.NET库
Spring.NET库有6个基本组成部分,基本上涵盖了Spring.NET框架的所有功能结构。
![]() ![]() ![]() ![]() ![]() ![]() |