执行完这段程序后,我们会得到一个新的 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,
文章来源于领测软件测试网 https://www.ltesting.net/