问答详情
源自:2-3 了解 JDK 动态代理

作业是怎么实现的?

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

提问者:西_瓜 2014-11-29 19:05

个回答

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


  • 用户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;

    }


    }