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号
浙公网安备 33010602011771号