logHandler調用的是move方法,但為什么timeHandler調用的也是move方法
logHandler調用invoke調用的是move方法,但為什么timeHandler也是調用move方法,這里已經隔了一層了。
public?static?void?main(String[]?args)?{
Moveable?car?=?new?Car();
?
InvocationHandler?timeHandler?=?new?TimeHandler(car);
?
Class<?>?cls?=?car.getClass();
?
/**
*?loader:類加載器<br>
*?interfaces:實現接口<br>
*?h?InvocationHandler<br>
*/
Moveable?timeCar?=?(Moveable)?Proxy.newProxyInstance(
cls.getClassLoader(),?cls.getInterfaces(),?timeHandler);
?
InvocationHandler?logHandler?=?new?LogHandler(timeCar);
?
Moveable?logCar?=?(Moveable)?Proxy.newProxyInstance(
cls.getClassLoader(),?cls.getInterfaces(),?logHandler);
?
logCar.move();
}
2016-02-17
因為你這兩個handler里的invoke方法里的method.invoke語句最后都是調的move()方法啊。
你timehandler傳的對象是car,之后的loghandler傳的timecar,所以你最后logcar調用move()方法的時候的執行順序是
執行loghandler的invoke方法中method.invoke語句前的部分
進入loghandler的method.invoke方法,這里實際是timehandler的invoke方法,同樣先執行method.invoke語句之前的部分
執行timehandler的method.invoke方法,這里實際是car的move()方法
執行timehandler的invoke方法里method.invoke語句之后的部分
執行loghandler的invoke方法里method.invoke語句之后的部分
2017-03-08
學習了.
2016-07-28
同謝,解答了我的疑問