美文网首页
静态代理与动态代理, jdk与cglib区别

静态代理与动态代理, jdk与cglib区别

作者: 光小月 | 来源:发表于2019-10-24 22:34 被阅读0次

    https://github.com/rainbowda/learnWay/blob/master/learnBase/src/main/java/com/learnBase/proxy/README.md

    静态代理
    优点:可以在不修改目标对象的前提下扩展目标对象的功能。
    缺点:
    冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。

    动态代理

    静态代理与动态代理的区别主要在:

    静态代理在编译时就已经实现,编译完成后代理类是一个实际的class文件
    动态代理是在运行时动态生成的,即编译完成后没有实际的class文件,而是在运行时动态生成类字节码,并加载到JVM中

    SpringAOP会优先选择JDK动态代理,当调用方法不是接口方法时,就只能选择Cglib了

    一、为什么不直接都使用JDK动态代理: JDK动态代理只能代理接口类,所以很多人设计架构的时候会使用 XxxService, XxxServiceImpl的形式设计,一是让接口和实现分离,二是也有助于代理。

    二、为什么不都使用Cgilb代理: 因为JDK动态代理不依赖其他包,Cglib需要导入ASM包,对于简单的有接口的代理使用JDK动态代理可以少导入一个包。 cglib无法代理final方法。

    相关文章

      网友评论

          本文标题:静态代理与动态代理, jdk与cglib区别

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