黑马程序员_高新技术之代理浅谈
来源:互联网 发布:网络小胖图片 编辑:程序博客网 时间:2024/05/29 14:58
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
一、代理的概述
要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能。例如:异常处理、日志、计算方法的运行时间、事物管理等等。
代理类要调用目标类的功能
目标类:
doSomething(){
methodCode.....
}
代理类:
doSomething(){
目标对象.doSomething()
}
二、代理架构图
三、动态代理的工作原理
1、Client(客户端)调用代理,代理的构造方法接受一个InvocationHandler,Client调用代理的各个方法,代理的各个请求转发给刚才通过构造方法传入的handler对象,
又把各请求分发给目标的相应的方法。就是将handler封装起来,其中this引用了当前的放(发来什么请求就接受哪个方法)。
猜想分析动态生成的类的内部代码:
a、动态生成的类实现了Collection接口(可以实现若干接口),生成的类有Collection接口中的所有方法和一个如下接受InvocationHandler参数的构造方法。
b、构造方法接受一个InvocationHandler对象,接受对象了要干什么用呢?该方法内部的代码会是怎样的呢?
实现Collection接口的动态类中的各个方法的代码又是怎样的呢?InvocationHandler接口中定义的invoke方法接受的三个参数又是什么意思?图解说明如下:
分析为什么动态类的实例对象的getClass()方法返回了正确结果呢?
为何动态类的实例对象的getClass()方法返回了正确结果,而没调用invoke方法:
因为代理类从Object上继承了许多方法,其中只对三个方法(hashCode、equals和toString)进行开发,委托给handler去自行处理,对于它身上其他方法不会交给代
理类去实现,所以对于getClass()方法,还是由Object本身实现的。即proxy3.getClass(),该是什么结果还是什么结果,并不会交给invoke方法处理。
四、自定义代理类的步骤:
<span style="font-size:18px;"> 获得动态代理类的字节码文件Class claz=Proxy.getProxyClass(Collection.class.getClassLoader(), Collection.class);//通过反射获得该动态代理类的构造方法Constructor c=claz.getConstructor(InvocationHandler.class); //编写一个InvocationHandler类class myInvocationHandler implements InvocationHandler{@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {// TODO Auto-generated method stubreturn null;}}//创建实例,接受一个invocationhandler对象c.newInstance(new myInvocationHandler());</span>
---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------
详细请查看:www.itheima.com
- 黑马程序员_高新技术之代理浅谈
- 黑马程序员_高新技术之注解浅谈
- 黑马程序员_高新技术之代理
- 黑马程序员_高新技术代理
- 黑马程序员高新技术_代理
- 黑马程序员_高新技术加强_浅谈
- 黑马程序员_高新技术_代理
- 黑马程序员---高新技术之动态代理类
- 黑马程序员--高新技术之动态代理
- 黑马程序员_java高新技术之动态代理
- 黑马程序员---高新技术之动态代理类
- 黑马程序员----高新技术----之动态代理
- 黑马程序员_高新技术加强_浅谈2
- 黑马程序员 高新技术---代理
- 黑马程序员-高新技术-代理
- 黑马程序员--高新技术--代理
- 黑马程序员_高新技术之枚举
- 黑马程序员_高新技术之反射
- Principle of Computing (Python)学习笔记(4) Combination + Yahtzee
- 只有原创和翻译文章才能推荐到首页
- Principle of Computing (Python)学习笔记(5) BFS Searching + Zombie Apocalypse
- 【翻译自mos文章】shutdown normal 挂起 在ora_j00X进程上
- 速度飞快集散地浪费斯蒂芬
- 黑马程序员_高新技术之代理浅谈
- 【翻译自mos文章】怎么样kill 一个被挂起的自动物化视图刷新job?
- 移动互联网时代:要让姑娘在一分钟爱上你
- Gray Code
- 如何成为一名真正的高级程序员/系统分析师
- UI-GET/POST的同步异步网络请求
- [leetcode] integer to roman
- UI-Json解析
- PHP学习笔记1