在Spring專案中進行簡單的cglib動態代理的學習測驗,主要代碼如下:
一個目標類HaveDinnerService
public class HaveDinnerService {
public String eat(String food) {
System.out.println("開始吃" + food + "=========================");
return food;
}
}
自定義的MethodInterceptor方法攔截器
public class MyMethodInterceptor implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
System.out.println("準備吃晚飯了");
Object result = methodProxy.invokeSuper(o, objects);
System.out.println(result.toString() + "真好吃啊");
return result;
}
}
獲取代理增強類的工廠
public class CglibProxyFactory {
public static Object getProxy(Class clazz) {
Enhancer enhancer = new Enhancer();
enhancer.setClassLoader(clazz.getClassLoader());
enhancer.setSuperclass(clazz);
enhancer.setCallback(new MyMethodInterceptor());
return enhancer.create();
}
}
測驗類
public class CglibMain {
public static void main(String[] args) {
HaveDinnerService haveDinnerService = (HaveDinnerService) CglibProxyFactory.getProxy(HaveDinnerService.class);
haveDinnerService.eat("龍蝦");
}
}

百度的解決辦法有洗掉cglib的jar包重新匯入的,有干脆刪掉cglib匯入asm的,但在瀏覽的程序中發現,spring已經將cglib集成到自己的jar包中,于是瞅了一眼引的包,發現
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import net.sf.cglib.proxy.Enhancer;
專案中都是引的net.sf.cglib下的類,于是把這些參考刪掉,重新導包,發現

果斷換成springframework,問題解決
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/482119.html
標籤:Java
