java代理

java代理

代理模式

给某一个对象提供一个代理,并由代理对象控制真实对象的访问

代理模式中的角色:

  • Subject:接口,定义了被代理的方法
  • RealSubject:被代理对象
  • Proxy:代理对象

静态代理和动态代理

区别

  • 静态代理在代码运行前已经生成代理类的字节码文件,即运行前已经确认代理和被代理对象间的关系;
  • 动态代理在代码运行后通过反射动态生成代理类的字节码文件

静态代理

代理对象将被代理对象作为成员对象来进行代理

优点:

  • 代码不侵入代理对象
  • 简单

缺点:

  • 如果一个代理类代理多个目标,代理类的代码会变得非常复杂
  • 如果一个代理类代理一个目标,会创建过多代理类
  • 修改被代理类的方法时要同时修改代理类

动态代理

动态代理就是根据接口或目标对象,计算出代理类的字节码,然后再加载到JVM中使用

常见动态代理实现方式:

  • JDK动态代理
  • CGLIB动态代理

JDK动态代理

根据接口创建代理类

java.lang.reflect.InvocationHandler定义代理类要执行的操作

java.lang.reflect.Proxy创建代理对象

代理对象通过反射获取方法,然后交给InvocationHandler来执行具体的代理逻辑

CGLIB动态代理

通过继承创建代理类

缺点:

  • 需要额外引入CGLIB包
  • 只能代理非final的public方法

java代理
http://xwww12.github.io/2023/10/08/java/java代理/
作者
xw
发布于
2023年10月8日
许可协议