DotNet企業級架構實戰之2—Spring.net對象裝配

之所以啓用spring.net,看中的是它的容器功能:一個可以管理對象整個生命週期的容器。在這個容器內,我們加入各種對象的定義信息,讓它們自動地裝配(類似於樂高積木,定製化的拼合)、實例化、事務協作、回收銷燬,以適應系統的需要。

  如前所述,spring.net基於配置運作。要讓spring.net的容器感知我們編寫的對象,需要做的就是在配置文件中聲明它們。所謂配置,載體當然是xml文件,定義明晰,清清楚楚。
  看一個xml配置片斷:

Code

  解釋一下:這是一個並不複雜的控制器類ArtistController,我們聲明瞭它的id和type(類型,類在程序集中完整路徑及程序集名)。
  這樣,spring.net的對象工廠(ObjectFactory或者ApplicationContext)在感知到對它的調用請求時,會實例化它並返回給需求方(可以是一個類,一個aspx頁面,一個asmx,或者別的什麼)——事實比這複雜得多,諸如你可以顯式地聲明它是單例的(加一個屬性 singleton="true",鄙人用的spring.net版本爲1.1.0.2),如此一來在spring.net容器生命週期內,它不會再有第二個實例,也許有時這會派上用場,能節省一些開銷。
  繼續觀察,〈object>節內會有一些〈property>聲明,這是object的屬性聲明,name即它在內部對外公開的名稱,其後可以使用value(值),ref(引用對象)或者expression(表達式)。此例使用的ref引用,意味着容器將干涉內政——把需要的對象注入到object的字段裏,前提是:ref指定的對象存在於容器裝載的配置文件集合中,並以相同的id聲明。
  勢必存在另一個配置,形如:

Code

  在這個稍顯簡單的供求關係中,它們是供方,被需要、被別的對象引用,容器會在那個ref它們的對象(ArtistController)涉及到指定字段被使用時,提供其實例,比如ArtistController有個叫abc的方法中,用到了ArtistDaoSpring字段的defg()方法,容器接收到這一信息,裝配ArtistDaoSpring字段對應的woodigg.DAO.ArtistDaoSpring對象——你也許會說,直接實例化不就完了麼?呵呵,如果這個對象也是基於別的組件裝配出來的,那就不僅僅只是實例化一下,還是需要重複一下這個過程,遞歸着來,搭積木一般把它裝配成功交付需求方(像極了這個商業社會的產業鏈)。
  在這裏,我們還看到一個屬性autowire,它可以有幾種枚舉選值(no,byName,byType,constuctor,autodetect,default),而byName的意思就是讓容器按名稱,自行查找同名的對象,進行裝配(id和類中的字段同名)。看到這裏,想必有人會說,你的第一個配置ArtistController,簡直就是廢話連篇,在object上指定autowire="byName"就行了,何必一個個指定property?bingo!如果不是爲了說明供求關係,我才懶得寫這些property,讓容器查找吧。

  ok,以上皆爲務虛,來務實一把,裝配一個簡單.net對象(pono?)到一個.aspx頁面耍耍。
  這個簡單對象RouteMap,是爲
Asp.net MVC 框架服務的——由於還無福使用WIN2008+IIS7,只得在.net 2.0下奮戰,對於new {action="Home",controller="Artist"}這麼瀟灑的範式自然也是隻能眼饞。沒關係!自己擴展吧:

Code

  RouteMap將被一個叫test.aspx頁面需要。它長這樣:

Code

  它會在頁面加載完成時,輸出這個RouteMap的控制器名稱。至於這東西到底從哪來的值,沒有說明。那麼,就爲這倆構造一個配置,由容器來裝配它們。
  新建一個routemap.xml文件,放在網站的~/config目錄下,形如:

Code

  ArtistRoutmap在被實例化時,我們希望它是有默認值的,在配置中逐一指定它構造函數參數項的值,這很好理解。
  頁面對象的聲明更簡單,只需說明它在站點中存在的路徑,字段引用按名稱查找吧。

  累述至此,對象裝配已經完成,但要讓容器自動的運轉起來,還需要在站點層面做些配置:
  1、引用spring.net程序集及相關(以1.1.0.2爲例,如有出入,稍爲調整),包括:Spring.core.dll,Spring.web.dll,Spring.Web.Extensions.dll,log4net.dll;
  2、修改web.config,裝載Spring模塊和處理程序,並指定配置上下文路徑,裝載日誌系統:

Code

  添一個全局配置Global.asax,在啓動時開啓日誌記錄:

Code
  run一下這個test.aspx,它會輸出控制器名稱"Artist",平平無奇,卻是與一種方式的告別——Craig Walls們在《Action in Spring》的序中這樣寫道:開發者有一種寶貴的品質,那就是“懶惰”。這種懶惰激勵開者努力用最小的開銷找到最佳的解決方案。
  其實,有時不需要那麼勤勞的,有些東西用成熟的框架能很好的解決,何必自己造輪子呢?
   至於web service頁.asmx的注入,不錯的中文文檔:
http://files.cnblogs.com/moye/SpringNet_document.rar
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章