SpringAOP:AspectJ環境的搭建及用法

之前在搭配AspectJ環境和運行第一個AspectJ程序時,一直報錯,在網上找運行AspectJ的具體步驟也沒找到,本篇博文總結AspectJ的下載,環境搭配以及第一個程序的運行。

首先爲什麼要用AspectJ,或者說AspectJ有什麼價值(來源於網絡)

在傳統 OOP 編程裏以對象爲核心,整個軟件系統由系列相互依賴的對象所組成,而這些對象將被抽象成一個一個的類,並允許使用類繼承來管理類與類之間一般到特殊的關係。隨着軟件規模的增大,應用的逐漸升級,慢慢出現了一些 OOP 很難解決的問題。

我們可以通過分析、抽象出一系列具有一定屬性與行爲的對象,並通過這些對象之間的協作來形成一個完整的軟件功能。由於對象可以繼承,因此我們可以把具有相同功能或相同特性的屬性抽象到一個層次分明的類結構體系中。隨着軟件規範的不斷擴大,專業化分工越來越系列,以及 OOP 應用實踐的不斷增多,隨之也暴露出了一些 OOP 無法很好解決的問題。

現在假設系統中有 3 段完全相似的代碼,這些代碼通常會採用“複製”、“粘貼”方式來完成,通過這種“複製”、“粘貼”方式開發出來的軟件如圖 1 所示。

圖 1.多個地方包含相同代碼的軟件

圖 1 多個地方包含相同代碼的軟件

看到如圖 1 所示的示意圖,可能有的讀者已經發現了這種做法的不足之處:如果有一天,圖 1 中的深色代碼段需要修改,那是不是要打開 3 個地方的代碼進行修改?如果不是 3 個地方包含這段代碼,而是 100 個地方,甚至是 1000 個地方包含這段代碼段,那會是什麼後果?

爲了解決這個問題,我們通常會採用將如圖 1 所示的深色代碼部分定義成一個方法,然後在 3 個代碼段中分別調用該方法即可。在這種方式下,軟件系統的結構如圖 2 所示。

圖 2 通過方法調用實現系統功能

圖 2 通過方法調用實現系統功能

對於如圖 2 所示的軟件系統,如果需要修改深色部分的代碼,只要修改一個地方即可,不管整個系統中有多少地方調用了該方法,程序無須修改這些地方,只需修改被調用的方法即可——通過這種方式,大大降低了軟件後期維護的複雜度。

對於如圖 2 所示的方法 1、方法 2、方法 3 依然需要顯式調用深色方法,這樣做能夠解決大部分應用場景。但對於一些更特殊的情況:應用需要方法 1、方法 2、方法 3 徹底與深色方法分離——方法 1、方法 2、方法 3 無須直接調用深色方法,那如何解決?

因爲軟件系統需求變更是很頻繁的事情,系統前期設計方法 1、方法 2、方法 3 時只實現了核心業務功能,過了一段時間,我們需要爲方法 1、方法 2、方法 3 都增加事務控制;又過了一段時間,客戶提出方法 1、方法 2、方法 3 需要進行用戶合法性驗證,只有合法的用戶才能執行這些方法;又過了一段時間,客戶又提出方法 1、方法 2、方法 3 應該增加日誌記錄;又過了一段時間,客戶又提出……面對這樣的情況,我們怎麼辦?通常有兩種做法:

根據需求說明書,直接拒絕客戶要求。擁抱需求,滿足客戶的需求。

第一種做法顯然不好,客戶是上帝,我們應該儘量滿足客戶的需求。通常會採用第二種做法,那如何解決呢?是不是每次先定義一個新方法,然後修改方法 1、方法 2、方法 3,增加調用新方法?這樣做的工作量也不小啊!我們希望有一種特殊的方法:我們只要定義該方法,無須在方法 1、方法 2、方法 3 中顯式調用它,系統會“自動”執行該特殊方法。

上面想法聽起來很神奇,甚至有一些不切實際,但其實是完全可以實現的,實現這個需求的技術就是 AOP。AOP 專門用於處理系統中分佈於各個模塊(不同方法)中的交叉關注點的問題,在 Java EE 應用中,常常通過 AOP 來處理一些具有橫切性質的系統級服務,如事務管理、安全檢查、緩存、對象池管理等,AOP 已經成爲一種非常常用的解決方案。


一、下載Aspectj以及AJDT

1:Aspectj可以直接去官網下載,或者在此鏈接下載,來源官方下載,放心使用:

http://download.csdn.net/detail/vipmao/9553778

下載完成後會得到一個aspectj-1.8.9.jar文件,然後啓動命令窗口進入jar文件所在路徑,輸入:java- jar aspectj -1.8.9.jar進行安裝。

安裝後還應該將bin文件夾所在路徑添加到PATH環境變量中,將lib文件夾下的aspectjrt.jar添加到CLASSPATH環境變量中,具體如何添加環境變量自行百度。

2:AJDT是一個eclipse插件,開發aspectj必裝,他可以提供語法檢查,以及編譯。

去官網根據自己Eclipse版本下載相應的AJDT插件,或者直接在此鏈接下載,來源官方網站,放心使用。

http://download.csdn.net/detail/vipmao/9554310

關於插件安裝的幾種方式可以參考:

http://blog.csdn.net/vipmao/article/details/51242558

二、創建項目

1:創建項目

安裝完AJDT插件後,咱們就可以創建Aspectj項目了,創建項目的時候,我們選擇New--->Aspectj Project當然,你也可以選擇先創建一個普通的Java項目(包括JavaEE項目),然後選中project,右鍵---->Configure-->convert to aspectj Project。 其實無論那種方式,無非都是爲了:使用apsectj的編譯器去編譯代碼,而不用JDk。



創建成功之後咱們可以在咱們的項目上看見AJ的標誌,這就說明這個項目類型是AspectJ。

2:創建測試類 Test.java

package com.mao.aspectJQS;

public class Test 
{
	public static void main(String[]args)
	{
		System.out.println("查詢所有美女聯繫方式");
		
	}
}
</span>
然後我們期望在查詢美女聯繫方式之前有一個權限驗證操作,並不是所有人都可以隨便查,那就需要我們的AspectJ了

3:創建spectj,命名爲:AuthAspect.aj

這裏千萬別習慣性就New --->Class了~切記,之前博主一直就是創建的Class,寫的aspectj內容,一直報錯。

接下來我們編寫這個aspect的內容。

package com.mao.aspectJQS;

public aspect AuthAspect
{
	// 指定在執行org.crazyit.app.service包中任意類的、任意方法之前執行下面代碼塊
	// 第一個星號表示返回值不限;第二個星號表示類名不限;
	// 第三個星號表示方法名不限;圓括號中..代表任意個數、類型不限的形參
	before(): execution(* com.mao.aspectJQS.*.*(..))
	{
		System.out.println("模擬進行權限檢查...");
	}
}

4:運行測試類Test.java 

運行結果:




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章