cglig 动态代理

0、能够代理实现类java

一、被代理类spring

/**
 * 被代理类
 */
public class Cat {
   
    public void cry() {
        System.out.println("喵喵喵");
    }
}

二、实现MethodInterceptor接口ide

import org.springframework.cglib.proxy.MethodInterceptor;
import org.springframework.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;

/**
 * 实现MethodInterceptor接口
 */
public class CatMethodInterceptor implements MethodInterceptor {

    /**
     * 生成方法拦截器
     * @param o 要进行加强的对象
     * @param method 拦截的方法
     * @param objects 参数列表
     * @param methodProxy 方法的代理
     * @return
     * @throws Throwable
     */
    @Override
    public Object intercept(Object o, Method method, 
                            Object[] objects, MethodProxy methodProxy) throws Throwable {
        System.out.println("——————调用前处理——————");
        //对被代理对象方法的调用
        Object object = methodProxy.invokeSuper(o, objects);
        System.out.println("——————调用后处理——————");
        return object;
    }
}

三、测试测试

import org.springframework.cglib.proxy.Enhancer;

/**
 * 测试Cglib
 */
public class CglibDynamicProxyDemo {

    public static void main(String[] args) {
        Enhancer enhancer = new Enhancer();
        //被代理类:Cat
        enhancer.setSuperclass(Cat.class);
        //设置回调
        enhancer.setCallback(new CatMethodInterceptor());
        //生成代理对象
        Cat cat = (Cat) enhancer.create();
        //调用代理类的方法
        cat.cry();
    }
}

四、运行结果代理

——————调用前处理——————
喵喵喵
——————调用后处理——————
相关文章
相关标签/搜索