1. 程式人生 > >主題:AspectJ的一個簡單例子

主題:AspectJ的一個簡單例子

AspectJ已經很成熟,並且有一個成熟的編輯工具:AJDT (eclipse外掛)

下面介紹一個AspectJ的簡單例子,從而對AspectJ有一個直觀的認識:

在面嚮物件語言中,我們一般用一個類處理一個關注點的需求。

但是在很多情況下,類不僅要處理自己的關注點,還必須滿足另一個關注點的需求。

也就是說類被系統中的多個關注點橫切了.

在類中多種關注點的混合將會導致程式碼分散 和程式碼糾纏 的發生。

程式碼分散 是指處理一個關注點所需的程式碼會分散到處理其他關注點的類中。

程式碼糾纏 是指利用一個類或方法實現了系統中的多個關注點。

下面是一個People類:

Java程式碼

public class People {
	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
}

這個類實現了系統中People資料物件的類模型。我們把它稱為主要關注點。

但是現在出現了一個新的需求,就是對所有People物件的屬性訪問都要記錄日誌。

即一個次要關注點(橫切關注點):對所有People物件的屬性訪問都要記錄日誌。

下面是將次要關注點直接編碼到People類的程式碼:

Java程式碼

public class People {
	private String name;
	private int age;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		System.out.println(">>> Log : modify people's attribute ...");








		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		System.out.println(">>> Log : modify people's attribute ...");








		this.age = age;
	}
}
 

雖然People類實現了日誌功能,不過日誌關注點的程式碼分散到了實現People類模型的程式碼中(程式碼分散),而且People

類實現了多個關注點(程式碼糾纏)。這樣對程式碼的修改於維護都是很不利的。

現在我們利用AspectJ來將這兩個關注點分離。下面是AspectJ程式碼:

Java程式碼

利用AspectJ編譯器編譯AspectJ程式和第一個People類(即將AspectJ程式織入到第一個People類中),

然後執行下面的主程式測試:

Java程式碼

控制檯輸出如下:

   >>> Log : modify people's attribute ...

   >>> Log : modify people's attribute ...

我們發現同樣實現了日誌功能,而且程式結構更加清晰。

AspectJ的語法類似於Java的語法,不過有一些特殊的關鍵字,關於它的更多內容請參見AspectJ官方文件。