第四章 Spring.Net 如何管理您的類___對象、對象工廠和應用程序上下文


  在前面一章我們介紹了依賴注入,控制反轉的概念,以及自己動手搭建了一下Spring.Net的環境。通過這些操作,我們知道了Spring.Net 的核心是使用依賴注入或控制反轉這種思想來管理業務對象,降低程序的依賴耦合。這一次的筆記,就是來了解一下,Spring.Net 如何管理我們的類。

4.1  對象,對象工廠和應用程序上下文介紹

  在前面的章節,我們曾稍微提到過關於對象,對象工廠和應用程序上下文。我們也知道了可以用這些接口來管理對象,接下來會詳細介紹他們。

  Spring.Core 程序集是Spring.Net的IOC容器管理對象的基礎,在Spring.Core程序集中提供了IObjectFactory,IApplicationContext和IObjectDefinition接口來幫助我們進行對象管理。

  IObjectFactory接口為Spring.Net 提供了一種高級的配置機制,可用Xml,txt等等很多類型的文件來任意配置對象的信息。

  IApplicationContext接口則擴展了IObjectFactory,並增加了面向切面編程(AOP)和消息資源處理等等的功能。

  簡單的說,IObjectFactory接口提供了配置框架的基本功能,IApplicationContext接口又在其基礎上擴展了許多企業級功能。可以說IApplicationContext就是IObjectFactory的超集,它具備了IObjectFactory所有的功能和行為。

4.2  IObjectFactory和IApplicationContext對比

  IObjectFactory 是初始化,配置和管理對象的真正容器,實際上所有的擴展容器都是實現了IObjectFactory接口,比如我們前面提到過的Spring.Objects.Factory.Xml.XmlObjectFactory類也是實現了IObjectFactory接口的。各個對象之間常常都會相互協作,也就是說他們相互具有依賴性。這些依賴關系我們可以通過IObjectFactory的配置反應出來。(注:有些配置是看不到的,比如運行時期對象之間方法的調用等。)

                          (上圖是:IObjectFactory的定義)

                    (上圖是:IApplicationContext的定義)

  可以看到,Spring.Context.IApplicationContext是實現了IObjectFactory接口的,IObjectFactory的派生類有很多很多,這里最常用的只有幾個,不常用的這里就不一一介紹了。如有感興趣的朋友可以詳細了解。

      (上圖是 IObjectFactory的派生接口或者派生類)

  我們前面提到IApplicationContext接口是IObjectFactory的超集,在實際開發中,我一般都會使用IApplicationContext來作為Spring.Net 依賴注入的容器。

4.3  對象的定義

  前面我們一直提Spring.Net 管理對象,卻一直沒有說過如何定義對象。在Spring.Net 容器中我們常常使用Xml文件來定義對象,雖然txt等等的文件類型也可以定義對象。但在這里我只記錄了常用的Xml文件來定義對象。如CnblogLesson_3_3中的Object.xml 就是我們用來定義對象的Xml文件。

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

  所有對象的父節點都是objects標簽,xmlns屬性表示它是屬於Spring.Net 的配置文件(這個屬性必須給上,否則Spring.Net的解析器不認識),objects標簽下面可以有一個或者多個object標簽。

  Id表示這個對象的編號,我們通過這個id就可以獲取到這個對象。如:

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

  type表示這個對象的類型,一般用type=”類的全名稱,命名空間名稱”來表示。

  如:type="CnblogLesson_3_3.ReaderDAL,CnblogLesson_3_3" 

  其中他們的屬性有很多,在這小節只介紹兩個(id,type),剩下的屬性在下面的章節會一一為大家介紹。

  本節筆記可能寫得有點啰嗦,但是只有一個簡單目的,就是讓人理解到Spring.Net 容器(包括IApplicationContext,IObjectFactory)與對象之間的作用,以及它們三者之間究竟有着何種關系。


免責聲明!

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



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