首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

AOP兑现机制

2012-10-24 
AOP实现机制本文来自于:http://kiral.iteye.com/blog/1198982??1 AOP各种的实现??? AOP就是面向切面编程,

AOP实现机制

本文来自于:http://kiral.iteye.com/blog/1198982

?

?

1 AOP各种的实现

??? AOP就是面向切面编程,我们可以从几个层面来实现AOP。

AOP兑现机制

在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较。?

?



3.1.1 使用动态代理
? 那如何使用动态代理来实现AOP。下面的例子演示在方法执行前织入一段记录日志的代码,其中Business是代理类,LogInvocationHandler是记录日志的切面,IBusiness, IBusiness2是代理类的接口,Proxy.newProxyInstance是织入器。
清单一:动态代理的演示


??? 本节介绍如何使用Cglib来实现动态字节码技术。Cglib是一个强大的,高性能的Code生成类库,它可以在运行期间扩展Java类和实现Java接口,它封装了Asm,所以使用Cglib前需要引入Asm的jar。 清单七:使用CGLib实现AOP



Javassist是一个编辑字节码的框架,可以让你很简单地操作字节码。它可以在运行期定义或修改Class。使用Javassist实现AOP的原理是在字节码加载前直接修改需要切入的方法。这比使用Cglib实现AOP更加高效,并且没太多限制,实现原理如下图:

AOP兑现机制




??? 我们使用系统类加载器启动我们自定义的类加载器,在这个类加载器里加一个类加载监听器,监听器发现目标类被加载时就织入切入逻辑,咱们再看看使用Javassist实现AOP的代码:
清单八:启动自定义的类加载器

    public?boolean?evaluateMsg?()?{??????//?执行此方法将不会织入切入逻辑???return?evaluateMsg(String?message);???}?????@MethodInvokeTimesMonitor("KEY_FILTER_NUM")???public?boolean?evaluateMsg(String?message)?{???

?

?4.2 参考资料

Java 动态代理机制分析及扩展CGlib的官方网站ASM官方网站JbossAOP Java5特性Instrumenttation实践

热点排行