讲讲代理吧

总结:何为代理,现实生活中也有很场景,比如去火车站买票,你给钱到售票员 售票员帮你买票,这其实就是一种代理,代理人 售票员 ,你是被代理的人。

           废话少说,代码分为 静态代理 和动态 代理,为什么会有动态代理呢,因为静态代理 要人为实现(自己手敲) 所有的方法,动态代理 只需要 写一个方法 让 代码去 实现所有的方法 ,说白了就是省事。

           动态代理主要 就是 字节码增强,就是运行的时候 根据目标类(都是字节码技术,asm(效率最高,因为他跟接近底层) ,jdk自带,cglib(封装了asm),javassist),生成一个代理类,代理类 有目标类的 所有方法,然后 多态的特性 就出来了。

          顺便提一下,AspectJ ,他是一种 编译时期 就直接修改 目标类(在字节码加代码)如果想深入,可以参考 我下文的链接

  • Spring AOP采用动态代理的方式,在运行期生成代理类来实现AOP,不修改原类的实现
  • Aspectj 使用编译期字节码织入(weave)的方式,在编译的时候,直接修改类的字节码,把所定义的切面代码逻辑插入到目标类中

         不说了,代码如下:

        静态代理,手动实现 所有 方法

         

 

 

         动态代理 cglib 不需要 接口,又称 子类代理,会根据目标类 生成 子类,然后子类调用:

        

 

        jdk 要接口,因为他是根据接口生成的方法,没有就生成不了,然后生成的实现类 : 

        

 

 

      调用如下:

      

 

      

拓展一下spring aop 实现原理,参考链接:

https://my.oschina.net/pingpangkuangmo/blog/517340

https://www.cnblogs.com/zuidongfeng/p/8707694.html

 

posted @ 2019-11-09 10:52  川流不息&  阅读(384)  评论(0)    收藏  举报