AOP的利器:ASM 3.0介绍 - 编程入门网
tor{
public static void main() throws Exception {
ClassReader cr = new ClassReader("Account");
ClassWriter cw = new ClassWriter(ClassWriter.COMPUTE_MAXS);
ClassAdapter classAdapter = new AddSecurityCheckClassAdapter(cw);
cr.accept(classAdapter, ClassReader.SKIP_DEBUG);
byte[] data = cw.toByteArray();
File file = new File("Account.class");
FileOutputStream fout = new FileOutputStream(file);
fout.write(data);
fout.close();
}
}
AOP的利器:ASM 3.0介绍(9)时间:2011-06-27 IBM 李夷磊 邱小侠 蔡一超执行完这段程序后,我们会得到一个新的 Account.class 文件,如果我们使用下面代码:
使用这个 Account,我们会得到下面的输出:
也就是说,在 Account 原来的 operation 内容执行之前,进行了 SecurityChecker.checkSecurity() 检查。 将动态生成类改造成原始类 Account 的子类 上面给出的例子是直接改造 Account 类本身的,从此 Account 类的 operation 方法必须进行 checkSecurity 检查。但事实上,我们有时仍希望保留原来的 Account 类,因此把生成类定义为原始类的子类是更符合 AOP 原则的做法。下面介绍如何将改造后的类定义为 Account 的子类 Account$EnhancedByASM。其中主要有两项工作: 改变 Class Description, 将其命名为 Account$EnhancedByASM,将其父类指定为 Account。 改变构造函数,将其中对父类构造函数的调用转换为对 Account 构造函数的调用。 在 AddSecurityCheckClassAdapter 类中,将重写 visit 方法:
改进 visitMethod 方法,增加对构造函数的处理:
AOP的利器:ASM 3.0介绍(10)时间:2011-06-27 IBM 李夷磊 邱小侠 蔡一超这里 ChangeToChildConstructorMethodAdapter 将负责把 Account 的构造函数改造成其子类 Account$EnhancedByASM 的构造函数:
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |