论坛首页 Java企业应用论坛

AOP的实现机制

浏览 129797 次
该帖已经被评为精华帖
作者 正文
   发表时间:2011-10-19  
bao231 写道
根据你上边说的我大胆猜测性能应该是这个顺序的吧,instrument>javassit>cglib>jdk 动态代理

但是为什么sping默认实现是jdk的动态代理呢,我的册数数据确实jdk的动态代理性能更好点啊,不知lz有没有测试数据,可以比较一下性能差别,这样也好以后有个比对吧。

以下是你附件的性能测试数据,我加了个javassit的
public class PerformanceTest {
    public static void main(String[] args) throws NotFoundException, CannotCompileException, InstantiationException, IllegalAccessException {
        
    	long start = System.currentTimeMillis();
        JavassistAopDemo.aop();
        long  end = System.currentTimeMillis();
        long javassistNeedTime = end - start; 
    	 start = System.currentTimeMillis();
        DynamicProxyDemo.aop();
         end = System.currentTimeMillis();
        long dynamicProxyNeedTime = end - start;

        start = System.currentTimeMillis();
        ProxyBusiness.staticDynamic();
        end = System.currentTimeMillis();
        long staticProxyNeedTime = end - start;

        start = System.currentTimeMillis();
        CglibAopDemo.byteCodeGe();
        end = System.currentTimeMillis();
        long byteCodeGeNeedTime = end - start;
        
        
        System.out.println("dynamicProxy need time:" + dynamicProxyNeedTime + "ms");
        System.out.println("staticDynamic need time:" + staticProxyNeedTime + "ms");
        System.out.println("byteCodeGe need time:" + byteCodeGeNeedTime + "ms");
        System.out.println("javassist need time:" + javassistNeedTime + "ms");
    }

}

dynamicProxy need time:16ms
staticDynamic need time:0ms
byteCodeGe need time:78ms
javassist need time:93ms

你循环一千次试试。
因为执行一次的话javassist需要加载的类非常多,它的快应该体现在第二次以后。
另外dynamicProxy第一次会生成字节码并加载,而第二次直接从缓存里获取,它也是在执行第二次后会快一下。
0 请登录后投票
   发表时间:2011-10-19  
代码已经更新,跟我们想想的不一样啊,嘿嘿
0 请登录后投票
   发表时间:2011-10-19  
从性能上讲,instrument秒杀其它实现
0 请登录后投票
   发表时间:2011-10-19  
关于AOP以前只是初步了解了一下,也没找到合适的资料继续学习。。。
0 请登录后投票
   发表时间:2011-10-19  
bao231 写道
代码已经更新,跟我们想想的不一样啊,嘿嘿

非常感谢你的细心,有时间我再研究下,我本来想做下性能测试的,但是时间不够。性能测试前还必须再深入研究下javassist和cglib。
0 请登录后投票
   发表时间:2011-10-19  
tywo45 写道
从性能上讲,instrument秒杀其它实现


期待lz的性能测试数据,任何东西没有测试数据做依据就是再好的理论都是乏味的,用事实说话是最直接的,嘿嘿
0 请登录后投票
   发表时间:2011-10-19  
bao231 写道
tywo45 写道
从性能上讲,instrument秒杀其它实现


期待lz的性能测试数据,任何东西没有测试数据做依据就是再好的理论都是乏味的,用事实说话是最直接的,嘿嘿

,正解!
0 请登录后投票
   发表时间:2011-10-19  
写的很好,格式和内容都不错
0 请登录后投票
   发表时间:2011-10-19  
收藏  慢慢看  感谢楼主
0 请登录后投票
   发表时间:2011-10-19  
写得很错,更深入的了解aop
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics