[TOC]

概述

文章参考:https://zhuanlan.zhihu.com/p/86740798

关于JDK动态代理,想必小伙伴都知道,它只能代理接口!但是有的小伙伴可能会有疑问,为什么它只能代理接口,不能代理类呢?这里借助某位技术大佬的话–”源码面前,了无秘密“,下面咱们就一起看下JDK动态代理源码实现,最后再探讨下JDK动态代理为什么不能代理类。

关于JDK动态代理,想必小伙伴都知道,它只能代理接口!但是有的小伙伴可能会有疑问,为什么它只能代理接口,不能代理类呢?

动态代理是在运行期间通过接口生成代理类的,与静态代理相比更加灵活,但是也有一定的限制,

第一是代理对象必须实现一个接口,否则会报异常,因为人家原理就是根据接口来生成代理对象的。

第二是有性能问题,因为是通过反射来实现调用的,所以比正常的直接调用来得慢,并且通过生成类文件也会多消耗部分方法区空间,可能引起Full GC。