知识大全 Java程序性能优化-代理模式(5)

Posted

篇首语:绳锯木断,水滴石穿。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java程序性能优化-代理模式(5)相关的知识,希望对你有一定的参考价值。

Java程序性能优化-代理模式(5)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

     代理模式( )

  在以上代码中 使用CtField make()方法和CtNewMehod make()方法在运行时生成了代理类的字段和方法 这些逻辑由Javassist的CtClass对象处理 将Java代码转换为对应的字节码 并生成动态代理类的实例

  注意 与静态代理相比 动态代理可以很大幅度地减少代码行数 并提升系统的灵活性

  在Java中 动态代理类的生成主要涉及对ClassLoader的使用 这里以CGLIB为例 简要阐述动态类的加载过程 使用CGLIB生成动态代理 首先需要生成Enhancer类实例 并指定用于处理代理业务的回调类 在Enhancer create()方法中 会使用DefaultGeneratorStrategy Generate()方法生成动态代理类的字节码 并保存在byte数组中 接着使用ReflectUtils defineClass()方法 通过反射 调用ClassLoader defineClass()方法 将字节码装载到ClassLoader中 完成类的加载 最后使用ReflectUtils newInstance()方法 通过反射 生成动态类的实例 并返回该实例 无论使用何种方法生成动态代理 虽然实现细节不同 但主要逻辑都如图 所示

  图   实现动态代理的基本步骤

  前文介绍的几种动态代理的生成方法 性能有一定差异 为了能更好地测试它们的性能 去掉DBQuery类中的sleep()代码 并使用以下方法测试

  public static final int CIRCLE= ;

  public static void main(String[] args) throws Exception

  IDBQuery d=null;

  long begin=System currentTimeMillis()

  d=createJdkProxy()                      //测试JDK动态代理

  System out println( createJdkProxy: +(System currentTimeMillis() beg    in))

  System out println( JdkProxy class: +d getClass() getName())

  begin=System currentTimeMillis()

  for(int i= ;i<CIRCLE;i++)

  d request()

  System out println( callJdkProxy: +(System currentTimeMillis() begin    ))

  begin=System currentTimeMillis()

  d=createCglibProxy()                    //测试CGLIB动态代理

  System out println( createCglibProxy: +(System currentTimeMillis() b    egin))

  System out println( CglibProxy class: +d getClass() getName())

  begin=System currentTimeMillis()

  for(int i= ;i<CIRCLE;i++)

  d request()

  System out println( callCglibProxy: +(System currentTimeMillis() beg    in))

  begin=System currentTimeMillis()

  d=createJavassistDynProxy()             //测试Javaassist动态代理

  System out println( createJavassistDynProxy: +(System currentTimeMil    lis() begin))

  System out println( JavassistDynProxy class: +d getClass() getName())

  begin=System currentTimeMillis()

  for(int i= ;i<CIRCLE;i++)

  d request()

  System out println( callJavassistDynProxy: +(System currentTimeMilli    s() begin))

  begin=System currentTimeMillis()

  d=createJavassistBytecodeDynamicProxy()     //测试Javassist动态代理

  System out println( createJavassistBytecodeDynamicProxy: +(System cu    rrentTimeMillis() begin))

  System out println( JavassistBytecodeDynamicProxy class: +d getClass()

  getName())

  begin=System currentTimeMillis()

  for(int i= ;i<CIRCLE;i++)

  d request()

  System out println( callJavassistBytecodeDynamicProxy: +(System curr    entTimeMillis() begin))

  

       返回目录 Java程序性能优化 让你的Java程序更快 更稳定

  编辑推荐

       Java程序设计培训视频教程

       J EE高级框架实战培训视频教程

       J ME移动开发实战教学视频

  Visual C++音频/视频技术开发与实战

  Oracle索引技术

cha138/Article/program/Java/gj/201311/27830

相关参考

知识大全 Java程序性能优化-代理模式(1)

Java程序性能优化-代理模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(2)

Java程序性能优化-代理模式(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(3)

Java程序性能优化-代理模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(4)

Java程序性能优化-代理模式(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-代理模式(6)

Java程序性能优化-代理模式(6)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-业务代理模式(2)[1]

Java程序性能优化-业务代理模式(2)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-业务代理模式(1)[1]

Java程序性能优化-业务代理模式(1)[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  &

知识大全 Java程序性能优化-业务代理模式(1)[2]

Java程序性能优化-业务代理模式(1)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  这

知识大全 Java程序性能优化-业务代理模式(2)[2]

Java程序性能优化-业务代理模式(2)[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  i

知识大全 Java程序性能优化-享元模式(1)

Java程序性能优化-享元模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!