执行完这段程序后,我们会得到一个新的 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/










