方法1
public void dynamicProxy(){
Collection collectionProxy = (Collection)Proxy.newProxyInstance(
System.class.getClassLoader(),
new Class[]{Runnable.class,Comparable.class,Collection.class},
new InvocationHandler() {
ArrayList target = new ArrayList();//被代理的对象,Collection间接的实现类
@Override
/**
*
* @param proxy----------------------------问题所在:方法中的proxy怎么理解
* @param method
* @param args
* @rerutn ----------------------------------问题所在:此方法的返回值又怎么理解
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("=====================================================");
// ArrayList target = new ArrayList();//被代理的对象,Collection间接的实现类
System.out.println(method.getName());
if(args!=null){
for (Object object : args) {
System.out.println(object);
}
}
//在调用目标之前做点什么
System.out.println("附加的内容1");
Object objct = method.invoke(target, args);
//在调用目标之后做点什
System.out.println("附加的内容2");
return objct;
}
});
// System.out.println(object);
// printMethodName(object.getClass());
collectionProxy.add("zxx");
collectionProxy.add("lhm");
collectionProxy.remove("lhm");
collectionProxy.add(new ArrayList().add(new ArrayList().add("hahahaha")));
System.out.println("大小是多少:" + collectionProxy.size());
}
在main方法中调用上面的方法,运行输出:
=====================================================
add
zxx
附加的内容1
附加的内容2
=====================================================
add
lhm
附加的内容1
附加的内容2
=====================================================
remove
lhm
附加的内容1
附加的内容2
=====================================================
add
true----------------------------------------------------问题所在:为什么这里会是true,我还以为是[[表示2维数组
附加的内容1
附加的内容2
=====================================================
size
附加的内容1
附加的内容2
大小是多少:2
|
|