例子二:
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));
}
@Override
public 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","张三");
}
}