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

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

难度中级
时长 2小时 0分
学习人数
综合评分9.70
184人评价 查看评价
9.8 内容实用
9.6 简洁易懂
9.7 逻辑清晰
public Object invoke(Object proxy, Method method, Object[] args)


proxy确实表示最终生成的代理类对象
视频确实讲的不错,但是我想说,确实,意义不是很大,了解前面的动态代理内容就可以了
不懂是你还没达到这个层次,达到那个高度你回来再看一遍就懂原理了…………
//Enhancer允许为非接口类型创建一个Java代理。
//Enhancer动态创建了给定类型的子类但是拦截了所有的方法。
//和Proxy不一样的是,不管是接口还是类他都能正常工作。
新建一个LogHandler实现InvocationHandler接口,和TimeHandler类似
在测试类下面继续添加如下代码:
InvocationHandler logHandler = new LogHandler(m);
Moveable m2= (Moveable) Proxy.newProxyInstance(cls.getClassLoader(),
cls.getInterfaces(), logHandler);
m2.move();
输出:
开始记录日志...
汽车开始行驶....
move
汽车行驶中...
汽车结束行驶..
那位说别人是码农的兄弟不知道现在是啥水平啊?高级工程师?架构师?易大师:真正的大师,永远怀着一颗学徒的心。
置顶那个是错误的,在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,是被代理对象
看到前面有很多不吐不快的人,到后面全都消失了。
如果是有参数的
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//简写
method.invoke(target, new Object[]{3000});
//简写
}
这边写完参数
测试那边 还要再调用一下 move方法,再填参数都是以3000为准。
这个地方有点不解,
令人窒息的操作
这PPT怎么这么秀!
public Object invoke(Object obj, Method method, Object[] args)
throws Throwable {
System.out.println("开始行驶");
method.invoke(targer,null);//没有参数就传入null
System.out.println("结束行驶");
return null;
}
老师说的好好

我是勤劳的搬运工,源码 源码。。

https://github.com/imooc-java/proxy
课程须知
本课程是 Java 开发课程的高级课程,希望各位小伙伴们在学习本课程之前,了解以下内容: 1)初步具备面向对象的设计思维 2)了解多态概念 3)了解反射
老师告诉你能学到什么?
1、代理模式概念机分类 2、代理模式应用场景 3、掌握静态代理、动态代理运用 4、理解JDK动态代理实现原理

微信扫码,参与3人拼团

意见反馈 帮助中心 APP下载
官方微信
友情提示:

您好,此课程属于迁移课程,您已购买该课程,无需重复购买,感谢您对慕课网的支持!

本次提问将花费2个积分

你的积分不足,无法发表

为什么扣积分?

本次提问将花费2个积分

继续发表请点击 "确定"

为什么扣积分?

举报

0/150
提交
取消