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();
    }
}

 

posted @ 2025-05-30 16:48  阿瞒123  阅读(10)  评论(0)    收藏  举报