Spring.NET是Spring Framework移植到.NET平台上的一個架構,與其他.NET架構比較:
- 不僅僅是個DI容器——雖然Spring.NET常被拿來與其他的DI容器如Castle等進行比較,但準確地說,Spring.NET是個應用程式框架,因為它具有豐富的API,可以用在整個應用中,如資料訪問、Web開發和整合測試等等。
- ASP.NET架構——Spring.NET ASP.NET架構並不是基於ASP.NET MVC的,它最大的好處是提升了生產率:新使用者在探索DI和Spring.NET時常常會尋求某個ASP.NET架構。
- 面向訊息的中介軟體整合——與Apache ActiveMQ、TIBCO EMS及MSMQ的整合簡化了使用這些架構的工作量,這是通過抽取出低層析的安全執行緒問題並使用基於POCO的編程模型實現的。
- 面向方面的編程(AOP)——Spring.NET提供了一個可擴充的AOP架構,該架構套件含了如切入點(pointcut)、通知(advice)等概念,同時還提供了便於使用的通知實現,如日誌、異常轉換、參數驗證、緩衝與自動化的重試(retry)等等。
- ADO.NET程式庫——ADO.NET輔助程式庫抽取並簡化了ADO.NET的資料來源操作,這是通過削減大量的樣板代碼並提供了基於模板的編程模型實現的。
- 運算式語言——Spring.NET提供了一個運算式語言,可在運行期查詢並操縱對象圖。
- 整合測試——支援整合測試以簡化資料訪問等操作。
- 模組化——將特性分布在不同的DLL中,這樣開發人員就可以選取自己所需要的DLL而無需使用整個架構。
- 企業支援——Spring.NET由SpringSource(前不久被VMWare收購)出品。由於有了大公司的支援,這樣那些想要使用Spring.NET的公司無疑吃了個定心丸。
- 計劃中的基於代碼的容器配置——目前的Spring.NET只支援基於XML的配置,而Castle則支援XML和“類型映射”風格的API兩種方式。在下一版中,Spring.NET將提供類似於Spring JavaConfig(已融合到了Spring 3.0中)的基於代碼的配置方式。
在面向方面(AOP)方面,Spring.NET也做了很好的支援,比如/*ASP.NET網站異常處理並記錄日誌*/這個功能可以這樣實現:
- 搭配使用Log4net在ASP.NET發生異常的時候記錄錯誤記錄檔——可以參考這篇文章。Log4net是一個開源高效能日誌記錄組件,log4net有很多好處,例如按日期記錄日誌,按目錄記錄,限制檔案大小等等。
- 使用Spring.NET Throw Service——通過實現Spring.NET Spring.Aop.IThrowsAdvice 介面,當異常發生的時候,調用自己實現的方法(例如調用Log4net記錄錯誤記錄檔,給管理員傳送簡訊息等等),注意實現IThrowsAdvice介面並不意味這個異常已經被處理,仍舊會繼續傳播。如果想要在 Throw Advice 處理時中止應用程式的處理流程,作法是拋出其它的異常。具體做法可以參考這篇文章。
- Spring.NET現在最高版本是1.3,將來計劃繼續發展到Spring.NET 2.0,屆時將全面支援.NET4.0的功能,相信在AOP方面會有更多功能呈現。有關Spring.NET最新動向,可以看InfoQ這個文章:對話Spring.NET