Spring dot Net

中文 Spring.Net

博客园 首页 新随笔 联系 订阅 管理
来源:
http://blog.csdn.net/trisaeyes/archive/2006/12/26/1462252.aspx

2004-08-04的第一版本算起,Spring.NET出来已经很久了。但是相比较他的姐姐Spring,虽然借助于 .NET 强大的反射机制,甚至拥有比原 Java 版本更强大的功能。但是不得不承认,相对于JAVA社区的人山人海,Spring.NET的人气真的是不旺。
 
在这篇笔记中,我会谈及一些概念和术语,如果你对IOC,DI, AutoWiring等概念不太熟悉的话,请在阅读本篇之前详细阅读圈内公认的几篇理论文章。找到他们很简单,放狗(Google)就可以了。
 
 
言归正传,让我们首先看一副经典的图把。

截至到2006-11-7hao 为止的Spring .NET构架图,展现出了 Spring .NET的各个模块。具有阴影的模块包含在1.0版本中,其他模块则被许诺在将来的发布中推出。
  
   从这幅图,我们可以看出Spring .NET和其老姐Spring的核心构架是完全一致的,Spring.Core 库是框架的基础, 提供依赖注入功能。
 
Spring.Aop 库提供对业务对象的面向方面编程(AOP) 的支持。Spring.Aop 库是对Spring.Core库的补充,可为声明性地建立企业应用和为业务对象提供服务提供坚实的基础。

Spring.Web 
库扩展了ASP.NET,添加了一些功能,如对ASP.NET页面的依赖注入,双向数据绑定,针对 ASP.NET 1.1Master pages(没明白这时在指什么)以及改进的本地化支持。
 
Spring.Services库可让你将任何一般对象(即没有从其他特殊的服务基类继承的对象)暴露为企业服务(Com+)或远程对象(remoting object.),使得.NET Web services 获得依赖注入的支持,并覆盖属性元数据。此外还提供了对Windows Service的集成。

Spring.Data
库提供了数据访问层的抽象,可以被多个数据访问提供者(从ADO.NET 到多个ORM 提供者)应用。它还包含一个对ADO.NET的抽象层,移除了为ADO.NET编写可怕的编码和声明性的事务管理的必要。
 
Spring.ROM将提供常用的对象/关系映射集成,支持iBatis.NET, Nhibernate.
并且提供了一些功能,比如对声明性事务管理的支持。
Spring.Core 库如同JAVA上的Core 封装包,提供了三个接口来实现依赖注入。
IObjectFactory Spring的核心容器接口, 负责管理容器内的注入对象。他提供了一个简单而优雅的工厂模式,移除了对单例和一些服务定位stub写程序的必要。允许你将真正的程序逻辑的配置和依赖的详细情况解耦。
 
作为对IObjectFactory的继承,IApplicationContext接口也在Spring.Core库中,并且添加了许多企业应用为中心的功能,例如利用资源文件进行国际化、事件传播、资源加载等。
 
由于IApplicationContext包括了IObjectFactory所有的功能,所以通常建议优先采用IApplicationContext。除了一些受限的场合比如在一个模块中,这时内存的消耗可能很关键,过多的内存占用可能导致反应速度下降。这时我们可以使用IObjectFactory
 
ObjectDefinition 是注入对象的定义接口,供 IObjectFactory / IApplicationContext 调用。
 
相信使用过Spring的朋友可以马上熟悉以上三个兄弟,实际上IObjectFactoryIApplicationContext可以完全被看作是BeanFactory, ApplicationContext.net翻版。
 
按照传统,用一HelloWorld来结束把

 1 using System;
 2 using System.Text;
 3 using Spring.Core;
 4 using Spring.Context;
 5 using Spring.Context.Support;
 6  
 7 namespace TestSpringNetTestHelloWorld
 8 {
 9    public interface SayHi
10     {
11        string SayHello();
12       
13     }
14  
15     public class HelloWorld : SayHi
16      {
17          public string SayHello()
18          {
19               return "Hello, World!";
20          }
21      }
22  
23      public class Program
24      {
25  
26         static void Main(string[] args)
27         {
28             StaticApplicationContext context = new StaticApplicationContext();
29             context.RegisterPrototype("HelloWorld"typeof(HelloWorld), null);
30  
31             SayHi o = context.GetObject("HelloWorld"as SayHi;
32            
33             System.Windows.Forms.MessageBox.Show(o.SayHello());
34         }
35      }
36 }
posted on 2007-08-12 09:42  Dorian Deng , springdotnet.parsesoft.net  阅读(239)  评论(0编辑  收藏  举报