美文网首页
动态代理的原理以及反射机制

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

作者: biginsect | 来源:发表于2018-06-14 15:55 被阅读26次

    动态代理

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

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

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

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

    反射机制

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

    功能

    • 在运行时能够判断任意一个对象所属的类
    • 在运行时构建任意一个类的对象
    • 在运行时获取任意一个类的所有的成员变量和方法
    • 在运行时调用任意一个对象的方法和属性

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

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

    相关文章

      网友评论

          本文标题:动态代理的原理以及反射机制

          本文链接:https://www.haomeiwen.com/subject/fogeeftx.html