執行完這段程序后,我們會得到一個新的 Account.class 文件,如果我們使用下面代碼:
public class Main {
public static void main(String[] args) {
Account account = new Account();
account.operation();
}
}
使用這個 Account,我們會得到下面的輸出:
SecurityChecker.checkSecurity ...operation... |
也就是說,在 Account
原來的 operation
內容執行之前,進行了 SecurityChecker.checkSecurity()
檢查。
上面給出的例子是直接改造 Account
類本身的,從此 Account
類的 operation
方法必須進行 checkSecurity 檢查。但事實上,我們有時仍希望保留原來的 Account
類,因此把生成類定義為原始類的子類是更符合 AOP 原則的做法。下面介紹如何將改造后的類定義為 Account
的子類 Account$EnhancedByASM
。其中主要有兩項工作:
- 改變 Class Description, 將其命名為
Account$EnhancedByASM
,將其父類指定為Account
。 - 改變構造函數,將其中對父類構造函數的調用轉換為對
Account
構造函數的調用。
在 AddSecurityCheckClassAdapter
類中,將重寫 visit
方法:
public void visit(final int version, final int access, final String name,
文章來源于領測軟件測試網 http://www.kjueaiud.com/