Java 动态代理例子
holder
package au.edu.utas; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.util.ArrayList; import java.util.List; public class DynProxy { public static void main(String[] args) { final List list = new ArrayList(); Object obj = Proxy.newProxyInstance( DynProxy.class.getClassLoader(), new Class[]{List.class}, new InvocationHandler(){ @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // System.out.println("object: "+proxy.hashCode()); 这个会产生dead circle //proxy就是被代理的对象,在这里又一次invoke的话,就继续进入下一个invoke. System.out.println("execute method: "+method.getName()); if(method.getName().equals("toString")){ Object returnValue = method.invoke(list, args); System.out.println("returnValue: "+returnValue); //如果return是null就是代表这个方法不放行 return null; }else if(method.getName().equals("add")) { //modify the value for first. return method.invoke(list, args[0]+" modify"); }else{ return method.invoke(list, args); } } }); System.out.println("obj: "+obj); List list2 = (List)obj; list2.add("hello world"); list2.add("test"); list2.add("utas"); list2.add("hobart"); System.out.println("value: "+list2.get(0)); } }
浙公网安备 33010602011771号