//Enhancer允許為非接口類型創建一個Java代理。
//Enhancer動態創建了給定類型的子類但是攔截了所有的方法。
//和Proxy不一樣的是,不管是接口還是類他都能正常工作。
//Enhancer動態創建了給定類型的子類但是攔截了所有的方法。
//和Proxy不一樣的是,不管是接口還是類他都能正常工作。
2018-02-12
新建一個LogHandler實現InvocationHandler接口,和TimeHandler類似
在測試類下面繼續添加如下代碼:
InvocationHandler logHandler = new LogHandler(m);
Moveable m2= (Moveable) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), logHandler);
m2.move();
輸出:
開始記錄日志...
汽車開始行駛....
move
汽車行駛中...
汽車結束行駛..
在測試類下面繼續添加如下代碼:
InvocationHandler logHandler = new LogHandler(m);
Moveable m2= (Moveable) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), logHandler);
m2.move();
輸出:
開始記錄日志...
汽車開始行駛....
move
汽車行駛中...
汽車結束行駛..
2018-02-11
那位說別人是碼農的兄弟不知道現在是啥水平?。扛呒壒こ處??架構師?易大師:真正的大師,永遠懷著一顆學徒的心。
2018-02-06
置頂那個是錯誤的,在main()中
Car car = new Car();
InvocationHandler h = new TimeHandler(car);
Class<?> cla = car.getClass();
h.invoke(car, cla.getDeclaredMethod("move"),null);
運行成功,說明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);
運行成功,說明public Object invoke(Object proxy, Method method, Object[] args)
中的proxy,是被代理對象
2018-02-02
如果是有參數的
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//簡寫
method.invoke(target, new Object[]{3000});
//簡寫
}
這邊寫完參數
測試那邊 還要再調用一下 move方法,再填參數都是以3000為準。
這個地方有點不解,
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//簡寫
method.invoke(target, new Object[]{3000});
//簡寫
}
這邊寫完參數
測試那邊 還要再調用一下 move方法,再填參數都是以3000為準。
這個地方有點不解,
2018-01-30
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
System.out.println("開始行駛");
method.invoke(targer,null);//沒有參數就傳入null
System.out.println("結束行駛");
return null;
}
throws Throwable {
System.out.println("開始行駛");
method.invoke(targer,null);//沒有參數就傳入null
System.out.println("結束行駛");
return null;
}
2018-01-29