- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- import java.util.ArrayList;
- import java.util.Collection;
- public class agent1 {
- public static void main(String[] args) {
- Collection proxy3= (Collection)Proxy.newProxyInstance(Collection.class.getClassLoader(),
- new Class[]{Collection.class},
- new InvocationHandler() {
- ArrayList target=new ArrayList();
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- System.out.println("外部的invoke下面----1");
- long begintime=System.currentTimeMillis();
- System.out.println("传来的args【0】的值:"+args[0]);
- if(args[0]=="zxx")
- args[0]="duzhenhua";
- Object retVal= method.invoke(target, args );
- System.out.println("里面的invoke下面----2");
- System.out.println("invake中的args【0】的值:"+args[0]);
- System.out.println("目前ArrayList里面的值是:"+target);
- long endtime=System.currentTimeMillis();
- System.out.println(method.getName()+"running time of"+(endtime-begintime));
- return retVal;
- }
- }
- );///创建代理对象
- System.out.println("第一个add上面");
- proxy3.add("zxx");
- System.out.println("第二个add上面");
- proxy3.add("lhm");
- System.out.println("第三个add上面");
- proxy3.add("bxd");
- }
- }
复制代码 好迷茫,它是怎么走的?原理是怎样,用这个代码给我解释解释。
为了搞明白它是怎么走的,写了这个多的注释,运行的结果是:
|
|