首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java 动态署理(三)

2012-09-03 
Java 动态代理(三)例子二:package com.test.DynamicProxyimport java.lang.reflect.InvocationHandlerim

Java 动态代理(三)

例子二:

package com.test.DynamicProxy;import java.lang.reflect.InvocationHandler;import java.lang.reflect.Method;import java.lang.reflect.Proxy;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * 动态代理ArrayList、HashMap * @author 守望幸福 * */public class DemoTwo implements InvocationHandler {private Object obj;//代理对象public DemoTwo(Object obj) {this.obj = obj;}public static Object factory(Object obj){Class<?> classType=obj.getClass();//获取被代理对象的类型return Proxy.newProxyInstance(classType.getClassLoader(), classType.getInterfaces(), new DemoTwo(obj));}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("--------------调用方法前--------------");Object rObj=method.invoke(obj, args);for(Object o : args){System.out.println(o);//输出传入的参数}System.out.println("--------------调用方法后--------------");return rObj;}/** * 测试 * @param args */@SuppressWarnings({"unchecked","rawtypes"})public static void main(String[] args) {List list=(List)factory(new ArrayList());//ArrayList实现了List接口,将ArrayList传入代理类初始化代理对象System.out.println(list.getClass());//代理对象list.add("zhangsan");list.add("lisi");//代理ArrayList中的add方法,会调用invoke方法。list.remove(0);//代理arrayList中的remove方法Map map=(Map) factory(new HashMap());map.put("name","张三");}}

热点排行