Java基础之代理Proxy

来源:互联网 发布:milogs工作日志软件 编辑:程序博客网 时间:2024/05/28 01:35

代理目的

  方法增强:在不修改源码的前提下为方法增加额外的逻辑,比如安全校验,事务控制,远程调用(增加通信细节);
  

代理分类

  1. 静态代理:应用程序在运行前代理类的.class文件就已经存在,通常由开发人员生成代理类;
  2. 动态代理:应用程序在运行期间运用反射机制生成代理类的.class文件,目前有JDK动态代理和CGlib动态代理。

    代理逻辑

JDK动态代理

使用要求:目标类必须实现某个接口,因为需要根据接口信息指定所拦截的方法。

CGLib动态代理

使用要求:目标类和方法不能声明为final类型,因为Cglib原理是针对目标类生成一个子类,覆盖其中的所有方法。

Java字节码生成开源框架

ASM: ASM 是一个 Java 字节码操控框架。它能够以二进制形式修改已有类或者动态生成类。不过ASM在创建class字节码的过程中,操纵的级别是底层JVM的汇编指令级别,这要求ASM使用者要对class组织结构和JVM汇编指令有一定的了解
Javassist: Javassist是一个开源的分析、编辑和创建Java字节码的类库。其主要的优点,在于简单,而且快速。直接使用java编码的形式,而不需要了解虚拟机指令,就能动态改变类的结构,或者动态生成类。

原创粉丝点击