實現步驟:
1.創建被代理的類及方法。
public class Train {
public void move() {
System.out.println("火車行駛中");
}
}
2.創建一個實現接口MethodInterceptor的類,重寫intercept方法,創建獲取被代理類的方法 getProxy(Class cla);
import java.lang.reflect.Method;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
public class CglibProxy implements MethodInterceptor {
private Enhancer enhancer = new Enhancer();
// 創建獲取被代理類的方法
public Object getProxy(Class cla) {
// 設置創建子類的類(爲那個類產生代理類)
enhancer.setSuperclass(cla);
enhancer.setCallback(this);
// 創建並返回類的實例
return enhancer.create();
}
/*攔截所有目標類方法的調用 obj 目標方法的實例對象 m 目標方法的反射對象 args 方法的參數 proxy 代理類的實例
@Override
public Object intercept(Object obj, Method m, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("日誌開始...");
// 代理類調用父類的方法
proxy.invokeSuper(obj, args);
System.out.println("日誌結束...");
return null;
}
}
3.獲取代理類,通過代理調用方法
public class Test {
public static void main(String[] args) {
CglibProxy proxy = new CglibProxy();
//返回代理類的對象
Train t = (Train)proxy.getProxy(Train.class);
t.move();
}
}
控制檯輸出:
日誌開始…
火車行駛中
日誌結束…