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進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。