//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
置顶那个是错误的,在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