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

四、運行結果代理

——————調用前處理——————
喵喵喵
——————調用後處理——————
相關文章
相關標籤/搜索