动态代理的原理以及反射机制

2018-06-14  本文已影响26人  biginsect

动态代理

代理:在某些情况下,一个对象不适合或者无法直接调用另一个对象,而代理对象可以在这两者之间起到中介的作用。也就是为其他对象提供一种代理来控制对某个对象的访问。

代理模式组成元素:1. 抽象类接口 2.被代理类(实现了抽象接口的类) 3.代理类(实际调用被代理类的方法和属性的类)

动态代理是一种方便运行时构建代理、动态处理代理方法调用的一种机制,即实现阶段不用关心代理谁,而是在运行阶段才指定代理的对象(不确定性),如果是自己写代理类就是静态代理(确定性)。

有很多场景是运用动态代理实现的,如 Spring AOP(面向切面编程)以及 RPC (Remote Procedure Call,远程过程调用——一种网络技术协议)。在编程中实现动态代理的方式有很多,在 JDK 提供的动态代理,主要是利用了反射机制。

反射机制

反射是 Java 提供的一种基础功能,它是指在运行时对任意一个类能够知道整个类的所有属性和方法,并且能够调用它的任意属性和方法(需要提供完整的 “包名+类名.class” )。

功能

通过反射机制我们可以直接操作类或者对象,甚至对其定义进行修改。注意到 Java 反射提供的 AccessibleObject 类下的 setAccessible() 方法 可以修改类成员的访问限制,(如 private 改成 public)。

Tips
反射会额外消耗一定的系统资源,若非必要,尽量少用反射。另外反射调用方法时可以忽略权限检查,可能引起安全问题。

上一篇下一篇

猜你喜欢

热点阅读