您好,登錄后才能下訂單哦!
Spring.Net和Log4net、NUnit、NHibernate一樣,也是先從Java中流行開來,然后移植到了.NET當中,形成了.NET版的Spring框架。其官方網站為:http://www.springframework.net/index.html。
首先看一下Spring.Net的架構圖:
根據架構圖可以看到,它的底層核心是Spring Core,上層是AOP層。其它的什么NHibernate、ES、WCF都基于這兩個底層。
看了這個架構圖只是了解了Spring框架所提供的功能,那么Spring.Net究竟是什么呢?它對我們開發來說究竟有什么樣的幫助呢?
簡單來說,Spring.Net是一個關注.NET企業應用開發的應用程序框架。它的核心思想是AOP(面向切面編程或者叫面向方面編程),與面向對象不同,它關注的是程序的“切面”,即橫向的內容(比如日志、驗證等通用型的功能)。隨著軟件系統規模的不斷升級,復雜程度越來越高,面向對象就有了它的弊端,這時候引入AOP就能有效的解決問題。從系統中分離出來方面,然后集中實現。從而可以獨立編寫業務邏輯代碼和方面代碼,在系統運行的時候,再將方面代碼“織入”到系統中,使得系統的功能得以擴展。
提到Spring.Net除了想到AOP之外,還有一個就是IOC(控制反轉)或者DI(依賴注入)。主要意思就是明確的定義組件接口,獨立的開發各個組件,然后通過組件之間的依賴關系進行組裝,進而成為一個完整的系統。
好了,我從來不喜歡講太多的理論,我喜歡用一些小例子讓大家快速的上手這個技術。由于Spring.Net是個相對比較龐大的內容,因此下面就介紹一下具體使用Spring.Net實現AOP的過程。
首先先下載Spring.Net。這個可以在官方鏈接中找到或者百度下一個。目前最新的版本號為1.3.2,建議讀者下載最新版本。
如果你下的是zip包,可以直接解壓縮。如果是msi安裝包,則你可以選擇路徑進行安裝。里面有Spring.Net的核心dll文件、doc文檔和一些例子。由于Spring.Net是開源的,因此你還會看到有項目的源代碼在里面,對底層源碼感興趣的讀者也可以拿出來學習使用。
一、建立一個類庫項目BIZ
BIZ是一個業務邏輯處理模塊,首先定義一個業務接口以及其實現類:
namespace BIZ.Commands { public interface IStudentService { void GoToSchool(string studentName, string className); } }
namespace BIZ.Commands { public class StudentService : IStudentService { public void GoToSchool(string studentName, string className) { Console.WriteLine("計算機({1})班的{0}同學去上學了。。。", studentName, className); } } }
這里我模擬一下任務,就是一個學生去上學的業務邏輯處理。
接下來,在這個項目中建立一個LogBeforeAdvice類并實現IMethodBeforeAdvice接口。這里面需要添加引用Spring.Net的一些dll文件,比如Spring.Core、Spring.Aop等,這些都可以在Spring.Net目錄中找到。
namespace BIZ.Aspects { public class LogBeforeAdvice : IMethodBeforeAdvice { public void Before(System.Reflection.MethodInfo method, object[] args, object target) { Console.WriteLine("攔截的方法名—>" + method.Name); Console.WriteLine("目標—>" + target); Console.WriteLine("參數—>"); if (args != null) { foreach (object arg in args) { Console.WriteLine("\t: " + arg); } } } } }
這里需要說明一下,這里實現的接口叫“前置通知”,除此之外還有“后置通知”、“環繞通知”、“異常通知”等共四種類型的通知。
前置通知是在方法執行前自動執行的通知;后置通知是在方法執行后自動執行的通知;環繞通知可以在方法調用前執行通知代碼,可以決定是否還調用目標方法;異常通知是方法拋出異常時自動執行的方面代碼。(注:其它三種通知可以自行添加實現,這里只演示前置通知。)
二、建立一個控制臺應用程序SpringNetAop
在App.config(新版本的VS都能夠自動生成這個文件,如果沒有自動新建一個)中,添加Spring.Net的相關配置:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <sectionGroup name="spring"> <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core" /> <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" /> </sectionGroup> </configSections> <spring> <context> <resource uri="config://spring/objects"/> </context> <objects xmlns="http://www.springframework.net"> <description>AOP例子</description> <object id="beforeAdvice" type="BIZ.Aspects.LogBeforeAdvice,BIZ"/> <object id="myStudentService" type="Spring.Aop.Framework.ProxyFactoryObject"> <property name="Target"> <object type="BIZ.Commands.StudentService, BIZ" /> </property> <property name="InterceptorNames"> <list> <value>beforeAdvice</value> </list> </property> </object> </objects> </spring> </configuration>
這里面就是核心的配置內容。通過config文件裝配需要注入的對象并織入到StudentService這個業務邏輯類中,這樣就完成了組裝。
然后在Program.cs中寫入如下代碼:
namespace SpringNetAop { class Program { static void Main(string[] args) { IApplicationContext context = ContextRegistry.GetContext(); IStudentService command = (IStudentService)context["myStudentService"]; command.GoToSchool("guwei4037", "一"); } } }
同樣的也需要引用Spring.Core和Spring.Aop的dll文件。
好,運行一下控制臺程序。
可以看到,在我調用上學的方法時,先執行了方面代碼里的內容。
通過這個例子,我們認識到Spring.Net可以根據需要動態的裝配組件,并可以在執行某個方面代碼前自動執行我們所要的操作。可以想象,這個功能完全可以使用在我們對業務操作進行日志記錄的場合,在調用方法時還是去上學,但是通過前置通知我們增加了日志記錄功能。
好了,關于Spring.Net的AOP部分就講解到這里,這里只是簡單講解了一小部分的Spring.Net的內容,主要目的是讓大家對Spring.Net有個基本的認識。如果需要更多詳細的資料,可以查看相關文檔資料:http://www.springframework.net/documentation.html。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。