【Java进阶-Java动态代理与AOP】04 实现InvocationHandler的invoke方法
来源:互联网 发布:midaspro3离线编辑软件 编辑:程序博客网 时间:2024/06/07 18:55
【Java进阶-Java动态代理与AOP】04 实现InvocationHandler的invoke方法
InvocationHandler接口中仅有一个抽象方法
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable
其中包含三个参数
proxy: 代理对象,帮助目标对象做事情的对象(卖联想电脑的代理商)
method: 代理对象要执行目标对象要完成的任务(帮A买联想电脑)
args: method方法需要的参数(需要的联想电脑的性能参数)需要说明的是,这三个参数的传递是JDK自动完成的,我们只需要“按部就班”给出接口所需要的参数,就可以得到所要的动态类了,继而可以创建对象并完成某些操作。
@Testpublic void getProxy() { System.out.println("new proxy instance "); Collection collProxy = (Collection)Proxy.newProxyInstance( Collection.class.getClassLoader(), new Class[]{Collection.class}, new InvocationHandler(){ // 此处是硬编码,缺乏灵活性 ArrayList target = new ArrayList(); // 目标对象(联想公司电脑销售部) @Override /** * proxy: 代理对象,帮助目标对象做事情的对象(卖联想电脑的代理商) * method: 代理对象要执行目标对象要完成的任务(帮A买联想电脑) * args: method方法需要的参数(需要的联想电脑的性能参数) * * 代理最简单的实现是 return method.invoke(target, args); * 但是代理在返回值之前可以做其他事情,比如说过滤 args参数,不合格不予执行等等。 */ public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // return method.invoke(target, args); System.out.println("execute....."); long startTime = System.currentTimeMillis(); Thread.sleep(1000); Object retVal = method.invoke(target,args); long endTime = System.currentTimeMillis(); System.out.println(method.getName() + " execute time is " + (endTime - startTime)); return retVal; } }); collProxy.add("123"); collProxy.add("abc"); int size = collProxy.size(); //invoke的返回值 System.out.println(size); System.out.println(collProxy.getClass().getName());// com.sun.proxy.$Proxy0 //分析:查看 Proxy API文档: //对于从Object继承过来的方法,只有 equals,hashCode和toString三个方法委托给handler处理,其他方法自己处理,如getClass方法}
可能还会存在对InvocationHandlerder对象运行的疑惑,我们将在下一篇文章中讲解。
阅读全文
1 0
- 【Java进阶-Java动态代理与AOP】04 实现InvocationHandler的invoke方法
- 【Java进阶-Java动态代理与AOP】05 分析InvocationHandler对象的运行原理
- Java动态代理以及InvocationHandler中invoke()方法笔记
- 【Java进阶-Java动态代理与AOP】
- spring动态代理的实现原理InvocationHandler中invoke()方法的调用问题
- Java动态代理借助Proxy与InvocationHandler实现
- 黑马程序员--09.动态与代理AOP--04【推理动态代理类内部结构I】【InvocationHandler实现类的具体写法】
- java代理(AOP) InvocationHandler
- JAVA动态代理实现 Proxy InvocationHandler
- Java动态代理实现接口invocationHandler
- java 动态代理范例 InvocationHandler与Proxy
- Java动态代理的源码分析;Proxy与InvocationHandler
- 【Java进阶-Java动态代理与AOP】03 创建动态类的实例对象及调用其方法
- Spring AOP之 java 动态代理(Proxy 与 InvocationHandler)理解
- java 动态代理范例 InvocationHandler与Proxy,拦截与代理
- java动态代理-InvocationHandler Proxy
- Java动态代理InvocationHandler+Proxy
- 【Java进阶-Java动态代理与AOP】01 代理类的作用与原理及AOP概念
- 简单的评论功能
- 手风琴相册制作的代码(不使用任何js)
- 中国有嘻哈:网易云、虾米音乐歌词爬虫项目分享
- ZOJ 1085 Alien Security(SPFA+dfs)
- A Bug's Life-----分类并查集
- 【Java进阶-Java动态代理与AOP】04 实现InvocationHandler的invoke方法
- P1939 【模板】矩阵加速(数列)
- MyBatis 入门开发
- 单片机中断详讲
- hdu 5532 Almost Sorted Array(LIS)
- HDU-1079 Calendar Game(找规律,博弈)
- Activity
- Struts2创建项目1
- uva 1608(分治 + 中途相遇法)