cglib动态代理-简单使用
引入依赖
<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>3.3.0</version>
</dependency>
java代码
被代理类
public class Dog {
public void run(String name) {
System.out.println("狗"+name+"----run");
}
public void eat() {
System.out.println("狗----eat");
}
}
拦截方法
public class MyMethodInterceptor implements MethodInterceptor {
/**
* @param proxyOjb 代理对象实例(即增强后的对象,相当于 this)
* @param method 被拦截的原始方法(反射对象,JDK 原生 Method)
* @param objects 方法参数数组,基本类型会被自动装箱
* @param methodProxy CGLIB 提供的快速调用工具,可直接调用父类(原始)方法,性能更高
* @return
* @throws Throwable
*/
@Override
public Object intercept(Object proxyOjb, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println(proxyOjb.getClass().getName());
System.out.println(method.getName());
System.out.println(methodProxy.getSuperName());
return null;
}
}
public class CgLibProxy {
public static void main(String[] args) {
//在指定目录下生成动态代理类,我们可以反编译看一下里面到底是一些什么东西
System.setProperty(DebuggingClassWriter.DEBUG_LOCATION_PROPERTY, "E:\\idea_workspace\\spring-pro\\src\\main\\resources");
//创建Enhancer对象,类似于JDK动态代理的Proxy类,下一步就是设置几个参数
Enhancer enhancer = new Enhancer();
//设置目标类的字节码文件
enhancer.setSuperclass(Dog.class);
//设置回调函数
enhancer.setCallback(new MyMethodInterceptor());
//这里的creat方法就是正式创建代理类
Dog proxyDog = (Dog)enhancer.create();
//调用代理类的eat方法
proxyDog.run("Tony");
//proxyDog.eat();
}
}

浙公网安备 33010602011771号