第三章 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文件定義的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM