CGLIB实现动态代理详解
CGLIB是一个强大的第三方库,用于在运行时生成代理类。相比于Java自带的原生动态代理,CGLIB可以代理没有实现接口的类,实现原理是通过继承目标类
来实现代理,使用CGLIB实现动态代理的详细步骤如下:
1. 引入CGLIB依赖
xml
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
2. 目标类
创建一个类作为目标类:
public class TargetClass {
public void doSomething() {
System.out.println("目标方法");
}
}
3. 实现MethodInterceptor接口
编写一个实现MethodInterceptor接口的类,用于处理代理逻辑:
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class CustomMethodInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {
System.out.println("执行目标方法之前");
Object result = proxy.invokeSuper(obj, args);
System.out.println("执行目标方法之后");
return result;
}
}
4. 测试
这个时候,就可以测试CGLIB生成动态代理对象:
import net.sf.cglib.proxy.Enhancer;
public class CglibDynamicProxyDemo {
public static void main(String[] args) {
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(TargetClass.class); //将代理类作为父类
enhancer.setCallback(new CustomMethodInterceptor());
TargetClass proxy = (TargetClass) enhancer.create();
proxy.doSomething();
}
}
结果:
//执行目标方法之前
//目标方法
//执行目标方法之后
可以看出使用CGLIB实现了动态代理比 原生动态代理 更加灵活,可以代理没有实现接口的类
。
总结
使用CGLIB比原生动态代理更加灵活,不需要代理实现接口的类。
希望对看到本文的你有帮助。
上一篇 Java静态代理和动态代理详解 |
记得点赞收藏哦!!!
| 下一篇 Java SPI机制详解 |