好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Spring.Net 环境准备和搭建

Spring.Net 环境准备和搭建

Spring.Net 环境准备和搭建

在前面一章我们介绍了依赖注入,控制反转的概念。接下来我们来真正动手搭建一下Spring.Net的环境,看一下Spring.Net 中的控制反转和依赖注入是什么样子。

3.1  Spring.Net  下载

  在Spring.Net的官方网站 http://www.springframework.net/  我们可以下载到关于Spring.Net所有资料,包括安装文件,文档以及代码。我们使用Spring.Net 框架经常要使用到的是一下文件:

Common.Logging.dll  包含了Spring.Net日志方面的功能(必须)

Spring.Core.dll       包含了Spring.Net 的核心库(必须)

Spring.Data.dll       包含了Spring.Net 的数据访问功能

Spring.Aop. dll       包含了Spring.Net 对面向切面编程(AOP)的支持

Spring.Web.dll       包含了Spring.Net 对ASP.NET进行了一系列功能扩展

3.2   Spring.Net  的配置介绍

  下载完Spring.Net相关文件后,我们要使用Spring.Net框架还需要进行一些简单的配置。

  Spring.Net 的配置文件(一般情况下加入到App.Config或者Web.Config中):

  1   <?  xml version="1.0" encoding="utf-8"   ?> 
  2   <  configuration  > 
  3     <  configSections  > 
  4       <  sectionGroup   name  ="spring"  > 
  5         <!--  提供Spring对应用程序上下文的支持  --> 
  6         <  section   name  ="context"   type  ="Spring.Context.Support.ContextHandler,Spring.Core"  /> 
  7         <!--  提供Spring对 对象容器的支持  --> 
  8         <  section   name  ="objects"   type  ="Spring.Context.Support.DefaultSectionHandler,Spring.Core"  /> 
  9       </  sectionGroup  > 
 10     </  configSections  > 
 11     <  spring  > 
 12       <  context  > 
 13         <!--  Spring中 IOC容器 所使用的对象XML文件定义  --> 
 14         <  resource   uri  ="assembly://CnblogLesson_3_2/CnblogLesson_3_2.Config/Objects.xml"  /> 
 15       </  context  > 
 16     </  spring  > 
 17   </  configuration  > 

Spring.Net 对象的配置文件:

 1   <?  xml version="1.0" encoding="utf-8"   ?> 
 2   <  objects   xmlns  ="http://www.springframework.net"  > 
 3     <  object   id  ="readerDal"   type  ="CnblogLesson_3_2.ReaderDAL,CnblogLesson_3_2"  > 
 4     </  object  > 
 5   </  objects  > 

  在基于XML定义的对象中,<object>是一个节点,所有节点的父节点必须是<objects>,在<objects xmlns="http://www.springframework.net"> 的属性中xmlns是必须的。并且必须将XML 设置为嵌入式资源 ,单击右键--》属性--》生成操作设置为嵌入的资源,否则Spring.Net 无法初始化Object。

3.3  开始搭建 Spring.Net  的环境

  首先,我们仍然是先准备好Spring.Net 的相关文件,在这里我目前使用的是Spring.NET-1.3.2(由于文件有50多M,大家可以到各大网站去下载),然后打开Visual Studio,创建一个控制台项目。由于我现在使用的是.NetFramework 4.0, 所以我找到Spring.NET-1.3.2.zip\Spring.NET\bin\net\4.0\release下,将需要的文件引用到项目中。在这里,我为了方便就全部将常用的文件全部添加进项目了,并将这些文件添加引用。

  其次,我们需要添加Spring.Net 的配置文件以及Spring.Net 对象的配置文件(如:Config/Objects.xml),由于是控制台项目,这里就添加App.Config作为配置文件。3.2节已经给出Spring.Net 配置文件以及Spring.Net 对象的配置的写法。

  接下来,我们再添加代码文件。为了方便理解,举的例子依然是,第二章“获取博客园文章”的例子。除了ReaderService.cs的代码是使用Spring.Net 依赖注入方式来实现,其他的类都没有变化。

  1   using   System;
   2   using   Spring.Context;
   3   using   Spring.Context.Support;
   4   using   Spring.Core.IO;
   5   using   Spring.Objects.Factory.Xml;
   6   using   Spring.Objects.Factory;
   7  
  8   namespace   CnblogLesson_3_3
   9   {
  10       ///   <summary> 
 11       ///   读取文章的业务逻辑类
  12       ///   </summary> 
 13       public   class   ReaderService : IReaderService
  14       {
  15           ///   <summary> 
 16           ///   读取文章的数据访问类对象
  17           ///   </summary> 
 18           private   IReaderDAL dal;
  19  
 20           public   ReaderService()
  21           {
  22               /*  是通过XmlObjectFactory或者是IApplicationContext来配置可以二者选其一  */ 
 23  
 24               //  或者是通过XmlObjectFactory配置 
 25              IResource input =  new  FileSystemResource( "  file:///C:/Objects.xml  "  );
  26              IObjectFactory factory =  new   XmlObjectFactory(input);
  27              dal = (IReaderDAL)factory.GetObject( "  readerDal  "  );
  28  
 29               //  通过IApplicationContext来配置 
 30              IApplicationContext context =  ContextRegistry.GetContext();
  31              dal = (IReaderDAL)context.GetObject( "  readerDal  "  );
  32           }
  33  
 34           ///   <summary> 
 35           ///   读者的名字
  36           ///   </summary> 
 37           private   string  Name {  get ;  set  ; }
  38  
 39           ///   <summary> 
 40           ///   读取文章的方法
  41           ///   </summary> 
 42           public   void   GetArticle()
  43           {
  44               dal.GetArticle();
  45           }
  46       }
  47  }

  添加Config/Objects.xml文件

  对象之间通常会相互协作,我们也可以说他们相互具有依赖性,Spring.Net 提供了一个接口IObjectFactory。我们通过IObjectFactory接口是初始化.配置以及管理对象的容器(它是所有容器的父接口)。

其中有三个重要的专有名词以下会做详细的解释: 对象,对象工厂,应用程序上下文。

 1   <?  xml version="1.0" encoding="utf-8"   ?> 
 2   <  objects   xmlns  ="http://www.springframework.net"   xmlns:xsi  ="http://www.w3.org/2001/XMLSchema-instance"   > 
 3  
 4     <  object   id  ="readerDal"   type  ="CnblogLesson_3_3.ReaderDAL,CnblogLesson_3_3"  > 
 5      
 6     </  object  > 
 7  
 8   </  objects  > 

  Object 就是配置文件中所配置的对象,前面一直说的对象,就是上面配置的readerDal。

  IObjectFactory接口为Spring.Net 提供了一种高级的配置机制来管理和维护对象。

  IApplicationContext接口则扩展了IObjectFactory,增加了面向切面编程 的功能和消息资源处理等功能。

  Spring.Objects.Factory.IObjectFactory有多个实现类,最常用的就是

  Spring.Objects.Factory.Xml.XmlObjectFactory,通过XmlObjectFactory 我们可以通过配置xml文件来定义和装配以及发布服务对象。

  简单的说,IObjectFactory接口提供了配置框架和基本功能,IApplicationContext接口又在其基础上扩展了许多企业级特性。可以说IApplicationContext是IObjectFactory的一个超集,具备IObjectFactory所有的功能与行为。

  上面这些话可能都太概念性了,接下来我们看一下在CnblogLesson_3_3中的示例,我们使用Spring.Objects.Factory.Xml.XmlObjectFactory来管理对象:

 1   //  或者是通过XmlObjectFactory配置 
 2  IResource input =  new  FileSystemResource( "  file:///C:/Objects.xml  "  );
  3  IObjectFactory factory =  new   XmlObjectFactory(input);
  4  dal = (IReaderDAL)factory.GetObject( "  readerDal  " );

  其中,关于IResource接口,非常重要,我们稍后会有专门的章节一起来和大家讨论,我们现在,只需要知道它是读取资源的接口就行了。

  所谓的,

  对象:就是示例中的 CnblogLesson_3_3.ReaderDAL 类的实例。

  对象工厂:IObjectFactory对象的示例,由于new XmlObjectFactory(input);得到的就是一个对象工厂实例。

 1   //  通过IApplicationContext来配置 
 2  IApplicationContext context =  ContextRegistry.GetContext();
  3  dal = (IReaderDAL)context.GetObject( "  readerDal  " );

  其中,应用程序上下文: ContextRegistry.GetContext();创建出来的就是应用程序上下文。

  

  通过前面的示例我们可以看到通过Spring.Net降低了业务逻辑层与数据访问层的耦合,但是实际上并没有完全解决耦合,只是把耦合放到了Object.XML 文件中。通过一个容器在程序运行的时候才形成依赖关系,即把接口的实现动态注入到类中。我通常把这种IOC的模式,看成一个升级版本的工厂模式,把Spring.Net的IOC容器看成一个大工厂,只不过这个工厂产生的对象都是在外部XML文件定义的。

  示例代码:  http://download.csdn.net/detail/cilence6788/5079971

 

 

分类:  循序渐进之Spring.Net框架

标签:  循序渐进之Spring.Net框架

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于Spring.Net 环境准备和搭建的详细内容...

  阅读:54次