java Cglib代理

tech2024-10-28  11

在看这篇文章之前你有必要读一下我上一篇Jdk动态代理,里面从源码刨析,看完再回来看这个事半功倍

https://blog.csdn.net/fly19920602/article/details/108311237

 

先准备演示代码

 

项目结构

一个被代理类

/** * Created by lijinquan on 2020/9/3. */ public class Presion { public void move(){ System.out.println("上班写代码!"); } }

 

 一个实现拦截器类

/** * Created by lijinquan on 2020/9/3. */ public class WorkTimeInterceptor implements MethodInterceptor { @Override public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable { System.out.println("name : " + method.getName() + " start ..."); Object result = null; result = methodProxy.invokeSuper(o, objects); System.out.println("name : " + method.getName() + " end ..."); return result; } }

 

一个测试类

/** * Created by lijinquan on 2020/9/3. */ public class Main { public static void main(String[] args) { Enhancer enhancer=new Enhancer(); enhancer.setSuperclass(Presion.class); enhancer.setCallback(new WorkTimeInterceptor()); Presion presion =(Presion) enhancer.create(); presion.move(); } }

 

运行测试类

 

以上就是一个Cglib代理的一个应用

这篇我就不带着看源码了,我写的jdk动态代理我花了几个下班的夜晚整理出来的,希望你看到能过去读读,刷新你对动态代理的认知

 

其实这个跟jdk动态代理有相似之处,也有差别,更有自身的缺点

Cglib代理应用起来就几行代码,也不需要被代理类去实现接口,而jdk需要被代理类实现接口

Cglib实现的拦截接口代码应该可以看出来,跟jdk的差不多,而且底层操作二进制也是asm,spring用的也是asm

缺点:不能代理final类

 

 

 

 

 

最新回复(0)