DesignMode_动态代理
作者:互联网
代理类别
- 静态代理(继承/组合):在编译阶段就确定了Proxy类的代码
- 动态代理:在JVM运行过程中,动态的创建一个类的代理类,并实例化代理对象
动态代理实现
- JDK原理
- 通过JVM实现代理类字节码的创建,利用反射机制生成一个实现代理接口的匿名类,在调用业务方法前调用InvocationHandler.invoke()处理,内部利用反射调用被代理对象的方法
- JDK动态代理只能代理实现了接口的类,代理类必须实现InvocationHandler接口
- 思想:反射 + 组合
public final class $Proxy0 extends Proxy implements Subject{
...
private static Method m0 = Class.forName("com.xtg.xm.designmode.proxy.jdk.Subject").getMethod("request", new Class[0]);
//$Proxy0
public final void request() {
try {
this.handler.invoke(this, m0, null);
...
- CGLIB原理
- 底层是通过ASM字节码框架生成类的字节码,生成一个实现MethodInterceptor接口的代理子类,通过方法拦截技术过滤对父类的方法调用
- 基于继承,目标类和目标方法不能被final修饰
- 思想:ASM + 继承
标签:调用,字节,代理,接口,DesignMode,动态,final 来源: https://www.cnblogs.com/xuanmingxi/p/14365856.html