作业是怎么实现的?

来源:2-3 了解 JDK 动态代理

西_瓜

2014-11-29 19:05

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

写回答 关注

3回答

  • JasonLau007
    2015-02-22 14:48:38

    楼上正解

  • 苦逼攻城狮
    2015-01-09 11:31:28

    接上面回答,调用时候得到日志记录的对象后, 再通过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();
    }


    Mr_Vis...

    Moveable logCar = (Moveable) Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), logHandler); 返回值为什么可以强转成Moveable ,依据是什么?为什么直接转成实现类不行

    2015-07-23 15:01:20

    共 1 条回复 >

  • 用户1078541
    2014-12-16 22:16:32

    在写一个日志代理

    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;

    }


    }


    JasonL... 回复西_瓜

    不是的。按照苦逼工程师的方法做

    2015-02-22 14:49:29

    共 2 条回复 >

模式的秘密---代理模式

本节课程将带你领略Java编程语言中代理模式的奥妙

54912 学习 · 98 问题

查看课程

相似问题