文章目錄
從該文章開始主要學習Spring.NET架構,對於很多程式員來說,Spring.NET架構是矛盾的,大家必須配置一些以前沒有接觸的檔案,同時更多的程式員卻還不知道Spring.NET架構究竟是什麼玩意,本章節主要介紹Spring.NET架構簡介及模組說明。
一、架構介紹
Spring架構天生麗質,因其先進架構系列沿思想整合,使從產生就深得歡迎,設計模式運爐火純青地方,幽雅魅力征服許JAVA,使這些成信徒,得程式員心得天,Spring引領J2EE潮流,同時Spring各種架構強強聯手信徒儘早飛翔插翅膀,比如老哥SSH(配置煩瑣strutsHibernate、Spring整合)、起秀EJSA(身材輕便使靈活及零配置EASYJWEB+JPA+Spring+Acegi,適合注重效率個人企業)等都藉助Spring走向成熟,帶無盡方便。
那麼做.Net們能不能欣賞品嘗Spring這道餐呢,答案肯定,Spring團隊應JAVASpring架構思想進行移植,貢獻出適合.Net項目Spring.NET架構。網Spring.Net文資料少,BAIDU目搜尋不關於spring.net文資料,這裡們盡能使文說明。
首先們認識Spring.NET,簡而言Spring.NET就利各種強設計模式做工具管理們項目體繫結構。 Spring.NET使優秀久經考驗設計模式,使們能夠科學合理管理整合們企業級各個層面及些分散組,並良好協調處理們間關係,增強項目健壯性。
Spring.NET IoC容器所解決,企業應類、象服務組合成應程式問題。IoC容器通過統(按:formalized,言意這些方式都已經定型、經過業界年考驗)方式分散組組合成完整應程式。Spring.NET架構所采,都被業界無數應程式考驗年、已經被定型設計模式最佳編程方式,實際,這些模式已經成們架構時法典,而通過Spring.NET,們以直接們整合自己應程式。目已有組織機構Spring架構出強壯、維護性好應程式,這確實非常好。
主要描述Spring.NET架構模組說明:
{
function onclick()
{
get_larger(this)
}
}" src="http://img.kanwenzhang.com/images/t2/200907/20090705222804635.jpg" border="0" alt="Spring.net(<a href=">
1、Spring.Core作整個架構基礎,實現依賴注入功能。
Spring.NET部分模組都依賴或擴充該模組。Spring.Core基礎IObjectFactory介面,該介面個簡單而優雅方式實現原廠模式,使們以無需自行編singleton類型眾服務定位器,並象配置及其依賴關係具體程式邏輯解耦。該模組IApplicationContext介面IObjectFactory擴充,增加諸企業級功能,包括使資源文進行文本本地化、事傳播資源裝載等等。
2、Spring.AOP業務象提供面向方面編程(AOP)支援。
AOP完善IoC容器功能,建立企業應使聲明式服務奠定堅實基礎。
3、Spring.WebASP.NET進行系列功能擴充,包括ASP.NET頁面進行依賴注入、雙向資料繫結、ASP.NET 1.1使Master page、以及增強本地化功能支援等。
4、Spring.Services任意“普通”象(意沒有繼承任何指定基底類型象)發布企業服務(COM+)或遠程象。
通過依賴注入特性中繼資料覆蓋等功能,該模組使.NETWeb服務獲得極靈活性。同時支援Windows台服務。
5、Spring.Data定義個抽象資料訪問層,以跨越各種資料訪問技術(從ADO.NET各種ORM)進行資料訪問。
該模組包含個ADO.NET抽象層,減少使傳統ADO.NET進行編碼交易管理時工作量。
6、Spring.ORM時流行ORM類庫提供個整合層,其包含聲明式交易管理等諸功能。
通過以上的介紹,大致對Spring.NET架構有個粗略的瞭解,至於如何在項目開發中引入Spring.NET架構以及如何使用Spring.NET架構協助系統開發,將在後面的章節給出詳細的說明。
二、Spring架構的作用
由於目前還沒有找到Spring.NET的作用和強大所在,而J2EE方面的Spring介紹文章相當的普遍,再此轉載了一篇關於《spring作用》的文章,該文章涉及的內容不深,但是很簡單的解釋了Spring架構的作用和使用方法。【注意以下代碼為Java代碼,只為說明spring】
應用背景:有一個應用,要求能夠很好地接受u盤或者移動硬碟(假如兩種介質的讀寫演算法不一樣)的接入,你如果是開發人員,應該怎麼樣開發這個應用?
•注意:程式裡面只有兩個功能:ReadInfo(),WriteInfo()
•方案1:在應用裡面將所有可能的介質演算法都開發一遍。但此方法不好,每次都要修改代碼
•方案2:用spring管理
如下:
1、定義隨身碟類:
//定義隨身碟類</p><p>package usbdisk;<br />import app.IDISK; </p><p>public class UsbDisk implements IDISK{</p><p> public String readInfo(){</p><p> return "從隨身碟讀過來的資訊";</p><p> }</p><p> public void writeInfo(String msg){</p><p> System.out.println("向隨身碟寫出資訊:" + msg);</p><p> }</p><p>}<br />
2、定義移動硬碟類:
package movedisk;</p><p>import app.IDISK; </p><p>public class MoveDisk implements IDISK{</p><p> public String readInfo(){</p><p> return "從移動硬碟讀過來的資訊";</p><p> }</p><p> public void writeInfo(String msg){</p><p> System.out.println("向移動硬碟寫出資訊:" + msg);</p><p> }</p><p>}</p><p>
3、定義一個介面管理隨身碟和移動盤:
package app; </p><p>public interface IDISK {</p><p> public abstract String readInfo();</p><p> public abstract void writeInfo(String msg);</p><p>}<br />
4、編寫設定檔:
<?xml version="1.0" encoding="UTF-8"?></p><p><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"></p><p><beans></p><p> <!-- 對象的產生,由架構通過反射機制完成,控制權從前端主程式轉化到了架構,</p><p> 這種思想叫做控制反轉(IOC),Inverse Of Control,可以很好的實現模組切換--></p><p> <bean id="disk" class="usbdisk.UsbDisk"></bean></p><p></beans>
5、編寫測試代碼:
package app;</p><p>import org.springframework.context.ApplicationContext;</p><p>import org.springframework.context.support.FileSystemXmlApplicationContext;</p><p>public class MainModule { </p><p> public static void main(String[] args) {</p><p> //讀取設定檔</p><p> ApplicationContext context = new FileSystemXmlApplicationContext("applicationContext.xml");</p><p> IDISK disk =(IDISK)context.getBean("disk");//根據設定檔的內容,執行個體化對象並且返回</p><p> disk.writeInfo("你們好");</p><p> } </p><p>}
可以看到此disk是指usbdisk.UsbDisk,指的是隨身碟,如果要改為移動盤呢,只要在配製檔案中改<bean id="disk" class="movedisk .MoveDisk "></bean> class的值就可以了。
調用方(應用)和模組(u盤或者移動硬碟)之間用設定檔聯絡起來。
當u盤或者移動硬碟接入時,改變更配置置檔案,調用方始終在讀設定檔,並沒有改變原始碼.
設定檔改變,可以進行模組切換,甚至改變模組行為。
測試代碼僅僅面向介面編程,而無需知道實作類別的具體名稱。同時,我們可以很簡單的通過修改設定檔來切換具體的底層實作類別。
•Spring作用1:這種思想可以很好地實現同類不同質的模組切換:例如要用不同的方法將內容寫入到不同的介質組件依賴關係減少,上面的例子中,我們通過Spring,在運行期動態將字串注入到實作類別的屬性中。這種概念將參數傳遞交給容器去做,叫做依賴注入.
•Spring作用2:可以方便地通過設定檔改變模組行為,動態注入屬性值。
由此可見Spring可以更好的協助我們實現代碼分離。