美文网首页
Java静态代理和动态代理

Java静态代理和动态代理

作者: bluefantasy2017 | 来源:发表于2019-05-29 10:43 被阅读0次

    Java静态代理: 其实就是设计模式中的一种; 如下图所示: 

    Java静态代理

    静态代理的缺点:

    Proxy类其实没有实际的内容,它只是实现了相同的接口,所有的请求都是代理到realSubject对象来处理。 如果系统中需要代理的类比较多,会导致系统内的类的数量增多,系统结果比较臃肿和松散。 


    Java动态代理:

    在Java代码的运行时动态的创建这个proxy对象,当这个proxy对象生命周期结束的时候自动回收。这样就避免了静态代理的大量的冗余类的问题了。 


    Java动态代理实现的两种方式: 

    1)JDK自带的动态代理方式; 要求被代理的类必须有接口实现; 

    这种方式的底层是使用反射来实现的。 

    2)使用CGLIB来实现动态代理; 不要求类必须实现接口; 只要方法不是final的就可以; 

    cglib的使用还是非常简单的,如下图: 

    CGLIB的使用示例

    CGLIB的底层是通过ASM字节码操纵工具来实现的。 

    常见的字节码操纵工具有:

    a)asm : 比较底层,基本上是通过JVM的汇编指令来操作的; 需要对class文件结果比较了解。 

    b)javassist : 使用起来比较简单。 

    c)BCEL

    相关文章

      网友评论

          本文标题:Java静态代理和动态代理

          本文链接:https://www.haomeiwen.com/subject/lsfetctx.html