反射机制和动态代理的原理_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 反射机制和动态代理的原理

反射机制和动态代理的原理

 2019/4/13 15:45:20  hbxflihua  程序员俱乐部  我要评论(0)
  • 摘要:反射机制是Java语言提供的一种基础功能,赋予程序在运行时(注意:不是编译时)自省(introspect)的能力。通过反射我们可用直接操作类或者对象,比如获取某个对象类的定义,获取类声明的属性和方法,调用对象的方法或者构造对象,甚至可以在运行时修改类的定义。反射会额外消耗一定的系统资源,还可以忽略权限检查,可能会破坏系统封装性产生安全问题。动态代理是一种方便运行时动态构建代理、动态处理代理方法调用的机制,很多场景都是利用类似机制做到的,比如包装RPC调用、面向切面编程(AOP)等
  • 标签:反射 代理 反射机制

class="MsoNormal">反射机制Java语言提供的一种基础功能,赋予程序在运行时(注意:不是编译时)自省(introspect)的能力。通过反射我们可用直接操作类或者对象,比如获取某个对象类的定义,获取类声明的属性和方法,调用对象的方法或者构造对象,甚至可以在运行时修改类的定义。

?

反射会额外消耗一定的系统资源,还可以忽略权限检查,可能会破坏系统封装性产生安全问题。

?

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

?

实现动态代理的方式很多,比如JDK自身提供的动态代理,它是利用Java自带的反射机制来实现的。还有其他实现方式,比如利用更高性能的字节码操作机制,ASMcglib(基于ASM)、Javassist等 。

?

JDK动态代理的优势:

1、最小化依赖关系,减少依赖意味着简化开发和维护,JDK本身的支持可能比cglib更可靠。

2、平滑升级JDK

3、代码实现简单

?

cglib的优势:

1、侵入性低,直接对实现类进行代理,无需依赖接口

2、高性能

?

动态代理的应用非常广泛,虽然最初多是因为RPC等的使用进入我们的视线,但是动态代理的应用场景远不如此,它符合AOP等切面编程。可以看做是对OOP的补充,因为OOP对于跨越不同对象或类的分散、纠缠逻辑表现力不够,比如在不同模块的特定阶段做一些事情,类似日志、用户鉴权、异常处理、性能监控、事务处理、资源释放等等。

?

AOP通过动态代理机制可以让开发者从这些琐碎的事情从抽身出来,大幅度提高了代码的抽象程度和复用度。从逻辑上来说,我们在软件设计和实现中的类似代理,如FacadeObserver等很多设计目的,都可以通过动态代理优雅地实现。

上一篇: String、StringBuffer、StringBuilder的区别? 下一篇: 没有下一篇了!
发表评论
用户名: 匿名