Spring.NET学习实践(1)---Spring.NET的构架

本文介绍了Spring.NET的核心架构及各模块功能,包括Spring.Core提供的依赖注入、Spring.Aop支持的面向切面编程,以及Spring.Web对ASP.NET的扩展等。通过一个简单的示例程序展示了如何使用Spring.NET。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring.NET 学习实践( 1
Spring.NET的构架:
 
 
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.1 Master 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 的朋友可以马上熟悉以上三个兄弟,实际上 IObjectFactory IApplicationContext 可以完全被看作是 BeanFactory, ApplicationContext .net 翻版。
 
按照传统,用一 HelloWorld 来结束把
 
using System;
using System.Text;
using Spring.Core;
using Spring.Context;
using Spring.Context.Support;
 
namespace TestSpringNetTestHelloWorld
{
   public interface SayHi
    {
       string SayHello();
      
    }
 
    public class HelloWorld : SayHi
     {
         public string SayHello()
         {
              return "Hello, World!";
         }
     }
 
     public class Program
     {
 
        static void Main(string[] args)
        {
            StaticApplicationContext context = new StaticApplicationContext();
            context.RegisterPrototype("HelloWorld", typeof(HelloWorld), null);
 
            SayHi o = context.GetObject("HelloWorld") as SayHi;
           
            System.Windows.Forms.MessageBox.Show(o.SayHello());
        }
     }
}
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值