17
2012-11-17 22:45
92 查看
package com.haizhitao.dynamicproxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.List; import java.util.Vector; public class VectorProxy implements InvocationHandler { private Object proxyObj; public VectorProxy(Object obj) { this.proxyObj = obj; } public static Object factory(Object obj) { Class<?> classType = obj.getClass(); return Proxy.newProxyInstance(classType.getClassLoader(), classType.getInterfaces(), new VectorProxy(obj)); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { System.out.println("before calling: " + method); if(null != args) { for(Object obj : args) { System.out.println(obj); } } Object object = method.invoke(proxyObj, args); System.out.println("after calling: " + method); return object; } public static void main(String[] args) { List v = (List)factory(new Vector()); System.out.println(v.getClass().getName()); v.add("New"); v.add("York"); System.out.println(v); v.remove(0); System.out.println(v); } } //output: // $Proxy0 // before calling: public abstract boolean java.util.List.add(java.lang.Object) // New // after calling: public abstract boolean java.util.List.add(java.lang.Object) // before calling: public abstract boolean java.util.List.add(java.lang.Object) // York // after calling: public abstract boolean java.util.List.add(java.lang.Object) // before calling: public java.lang.String java.lang.Object.toString() // after calling: public java.lang.String java.lang.Object.toString() // [New, York] // before calling: public abstract java.lang.Object java.util.List.remove(int) // 0 // after calling: public abstract java.lang.Object java.util.List.remove(int) // before calling: public java.lang.String java.lang.Object.toString() // after calling: public java.lang.String java.lang.Object.toString() // [York]
相关文章推荐
- 在Fedora 17 64位系统上安装Oracle 11g R2
- 20161216C语言基础17_字符串处理函数之fgets与gets
- win7安装fedora17
- 树梅派应用17:树莓派3如何使用蓝牙
- Linux设备驱动程序学习(17)-USB 驱动程序(二)
- C++17尝鲜:把整形变量 i 初始化成1的七种方法
- Java与Flex学习笔记(17)---Flex+Red5实现在线视频播放
- 设计模式(17)之中介者模式
- fedora17 下(Broadcom Corporation BCM4312)的安装
- 读书笔记--SQL必知必会17--创建和操纵表
- 为fedora17安装有线网卡驱动
- 17-1-3 1601上机作业
- 17.接收用户输入的字符串,将其中的字符以与输入相反的顺序输出。“abc”-"cba"
- 17 - 02 - 06 计算机网络(27)(统一资源定位符,URL)
- 17_求a和b之和.cpp
- ABP入门系列(17)——使用ABP集成的邮件系统发送邮件
- 用递归推算1,1,2,3,5,8,12,17,23....的第n个值
- 17 - 02 - 29 图解HTTP(03)
- Fedora 17 安装后配置笔记
- 17 - 03 - 15 图解HTTP(19)