为了账号安全,请及时绑定邮箱和手机立即绑定

作业是怎么实现的?

最后那个作业是怎么实现的?

正在回答

3 回答

楼上正解

0 回复 有任何疑惑可以回复我~

接上面回答,调用时候得到日志记录的对象后, 再通过LogHandler代理一次即可:代码如下:

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();
}


8 回复 有任何疑惑可以回复我~
#1

Mr_Vision

Moveable logCar = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), logHandler); 返回值为什么可以强转成Moveable ,依据是什么?为什么直接转成实现类不行
2015-07-23 回复 有任何疑惑可以回复我~

在写一个日志代理

public class LogHandler implements InvocationHandler {


private Object target;

public LogHandler(Object target) {

super();

this.target = target;

}




/**

* 参数

* proxy 被代理对象

* method 被代理对象的方法

* args 方法的参数

* 返回值:

* Object 方法的返回值

*/

@Override

public Object invoke(Object proxy, Method method, Object[] args)

throws Throwable {

System.out.println("日志开始。。。");

method.invoke(target);

System.out.println("日志结束。。。");

return null;

}


}


0 回复 有任何疑惑可以回复我~
#1

西_瓜 提问者

你的意思是记录日志的时候汽车要跑一次,我在记录时间的时候 汽车又要跑一次 记录一次汽车就跑一次吗?(PS:汽车跑一次是指调用move() Method)。
2014-12-25 回复 有任何疑惑可以回复我~
#2

JasonLau007 回复 西_瓜 提问者

不是的。按照苦逼工程师的方法做
2015-02-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

作业是怎么实现的?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信