public Object invoke(Object proxy, Method method, Object[] args)
proxy確實(shí)表示最終生成的代理類對象
proxy確實(shí)表示最終生成的代理類對象
2018-02-28
已采納回答 / 小丶冬瓜
在使用中指定哪個(gè)就調(diào)用哪個(gè),比如說例子中測試類調(diào)用了Train.move()方法,那么就是move()方法,如果Train類中還存在其他方法比如put()方法,那么則通過Train.put()調(diào)用。而proxy.invokeSuper(obj, args);中的args是指定在調(diào)用方法時(shí)可否帶參數(shù)。如果proxy.invokeSuper(obj);的話。在調(diào)用方法時(shí)是不可以帶參數(shù)的。
2018-02-25
視頻確實(shí)講的不錯(cuò),但是我想說,確實(shí),意義不是很大,了解前面的動態(tài)代理內(nèi)容就可以了
2018-02-25
不懂是你還沒達(dá)到這個(gè)層次,達(dá)到那個(gè)高度你回來再看一遍就懂原理了…………
2018-02-12
//Enhancer允許為非接口類型創(chuàng)建一個(gè)Java代理。
//Enhancer動態(tài)創(chuàng)建了給定類型的子類但是攔截了所有的方法。
//和Proxy不一樣的是,不管是接口還是類他都能正常工作。
//Enhancer動態(tài)創(chuàng)建了給定類型的子類但是攔截了所有的方法。
//和Proxy不一樣的是,不管是接口還是類他都能正常工作。
2018-02-12
新建一個(gè)LogHandler實(shí)現(xiàn)InvocationHandler接口,和TimeHandler類似
在測試類下面繼續(xù)添加如下代碼:
InvocationHandler logHandler = new LogHandler(m);
Moveable m2= (Moveable) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), logHandler);
m2.move();
輸出:
開始記錄日志...
汽車開始行駛....
move
汽車行駛中...
汽車結(jié)束行駛..
在測試類下面繼續(xù)添加如下代碼:
InvocationHandler logHandler = new LogHandler(m);
Moveable m2= (Moveable) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), logHandler);
m2.move();
輸出:
開始記錄日志...
汽車開始行駛....
move
汽車行駛中...
汽車結(jié)束行駛..
2018-02-11
那位說別人是碼農(nóng)的兄弟不知道現(xiàn)在是啥水平啊?高級工程師?架構(gòu)師?易大師:真正的大師,永遠(yuǎn)懷著一顆學(xué)徒的心。
2018-02-06
置頂那個(gè)是錯(cuò)誤的,在main()中
Car car = new Car();
InvocationHandler h = new TimeHandler(car);
Class<?> cla = car.getClass();
h.invoke(car, cla.getDeclaredMethod("move"),null);
運(yùn)行成功,說明public Object invoke(Object proxy, Method method, Object[] args)
中的proxy,是被代理對象
Car car = new Car();
InvocationHandler h = new TimeHandler(car);
Class<?> cla = car.getClass();
h.invoke(car, cla.getDeclaredMethod("move"),null);
運(yùn)行成功,說明public Object invoke(Object proxy, Method method, Object[] args)
中的proxy,是被代理對象
2018-02-02
如果是有參數(shù)的
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//簡寫
method.invoke(target, new Object[]{3000});
//簡寫
}
這邊寫完參數(shù)
測試那邊 還要再調(diào)用一下 move方法,再填參數(shù)都是以3000為準(zhǔn)。
這個(gè)地方有點(diǎn)不解,
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//簡寫
method.invoke(target, new Object[]{3000});
//簡寫
}
這邊寫完參數(shù)
測試那邊 還要再調(diào)用一下 move方法,再填參數(shù)都是以3000為準(zhǔn)。
這個(gè)地方有點(diǎn)不解,
2018-01-30
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
System.out.println("開始行駛");
method.invoke(targer,null);//沒有參數(shù)就傳入null
System.out.println("結(jié)束行駛");
return null;
}
throws Throwable {
System.out.println("開始行駛");
method.invoke(targer,null);//沒有參數(shù)就傳入null
System.out.println("結(jié)束行駛");
return null;
}
2018-01-29