• 沒有找到結果。

第二章 相關研究與技術背景

2.2 AspectJ

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖 2.4 AOP 編譯程式流程

AOP 的優點有下列幾項:

一、單一模組的責任更簡單 二、可以做更好的模組化 三、使系統更容易發展 四、使程式設計上更具彈性 五、使程式的重用率更高

六、加快開發速度並滅少實作成本

2.2 AspectJ

AspectJ 是由 Java 語言延伸的 AOP 語言。每一個有效的 Java 程式就是一個有效 的 AspectJ 程式。AspectJ 的編譯器產生出符合 Java byte-code 規範,可執行在 Java 的 virtual machine (VM)。它具備所有的 Java 優點,也方便 Java 程式設計師去學 習 AspectJ。

在 AspectJ,經由編譯織入(weaving)規則的實作稱為橫跨(crosscutting)。AspectJ 定義兩種問題的 crosscutting:靜態橫跨(Static crosscutting)和動態橫跨(Dynamic

靜態橫跨是修改系統靜態結構(如:類別 Class、介面 Interface 和剖面 Aspect) 的織入。本身並不改變系統的執行行為。靜態橫跨最重要的功能是支援動態橫跨 的實作。例如:想要新增變數或方法至類別或介面中,為了確定特定類別的狀態 和行為。這可被使用在動態橫跨的行為上。另外,靜態橫跨可以被使用在宣告編 譯時的警告和錯誤的橫跨多個模組。

AspectJ 延伸使用下面的構造指定織入規則程序:

一、Join Point

Join Point 是 應 用 程 式 在 執 行 時 加 入 流 程 的 確 認 點 (identifiable point)。具體來說,就是 Advice 在應用程式中被呼叫執行的點,這個點 可能是某個方法被呼叫之前或之後(或兩者都有),或是某個例外發生 的時候。

二、Pointcut

Pointcut 是一種定義,可以藉由這個定義指定某個 Aspect 在哪些 Joinpoint 時被應用至應用程式之上。可以在定義檔中撰寫 Pointcut,當 中說明了哪些 Aspect 要應用至應用程式中的哪些 Joinpoint。

三、Advice

Aspect 的具體實作稱之為 Advice,以儲存存取紀錄為例,Advice 中會包括真正的儲存存取紀錄程式碼是如何實作的,Advice 中包括了 Cross-cutting concerns 的行為或所要提供的服務。

四、Introduction

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

Introduction 可以對現存的類別增加行為,而不用修改該類別的程 式,也就是說,可以為某個已撰寫、編譯完成的類別,在執行時期動態 加入一些方法或行為,而不用修改或新增任何一行程式碼。

五、Compile-time declaration

Complie-time declearation 是靜態的 crosscut 通知,可以增加在執行 時期偵測到錯誤或警告時,就通知使用何種 pattern。

六、Aspect

將散落於各個物件之中的 Cross-cutting concerns 收集起來,設計各 個獨立可重用的物件,這些物件稱之為 Aspect。在 AOP 中著重於將 Aspect 從程式流程中獨立出來,在需要該服務的時候,縫合(Weave)

至應用程式之上,不需要服務的時候,也可以馬上從應用程式中脫離,

應用程式中的可重用元件不用作任何的修改。

另一方面,對應用程式中可重用的元件來說, AOP 不用知道處理 提供服務的物件之存在,具體的說,與服務相關的 API 不會出現在可重 用的應用程式元件之中,因而可提高這些元件的重用性,您可以將這些 元件應用至其它的應用程式之中,而不會因為加入了某些服務而與目前 的應用程式框架發生耦合。

圖 2.5 AspectJ 的編譯流程

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y