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","张三");}}