java核心技术36讲

你离开我真会死。 提交于 2019-12-01 12:17:23

谈谈Java反射机制,动态代理是基于什么原理?
反射机制

是Java语言提供的一种基础功能,赋予程序在运行时自省(introspect,官方用语)的能力。

通过反射我们可以直接操作类或者对象,比如获取某个对象的类定义,获取类声明的属性和方法,调用方法或者构造对象,甚至可以运行时修改类定义。
动态代理

是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如用来包装RPC调用、面向切面的编程(AOP)。

实现动态代理的方式很多,比如JDK自身提供的动态代理,就是主要利用了上面提到的反射机制。还有其他的实现方式,比如利用传说中更高性能的字节码操作机制,类
似ASM、 cglib(基于ASM)、 Javassist等。
JDK自身提供的动态代理 vs cglib(基于ASM)
JDK Proxy的优势:

    最小化依赖关系,减少依赖意味着简化开发和维护, JDK本身的支持,可能比cglib更加可靠。
    平滑进行JDK版本升级,而字节码类库通常需要进行更新以保证在新版Java上能够使用。
    代码实现简单

cglib框架的优势:

    有的时候调用目标可能不便实现额外接口,从某种角度看,限定调用者实现接口是有些侵入性的实践,类似cglib动态代理就没有这种限制。
    只操作我们关心的类,而不必为其他相关类增加工作量。
    高性能。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!