public class Proxy_day02
{
/**
* @param args
* 将代理的硬编码模式改为灵活的调用模式,适应用户的需求
*/
public static void main(String[] args)
{
final ArrayList target=new ArrayList();
final MyAdvice myAdvice=new MyAdvice();
Collection coll2 = (Collection) getProxy(target,myAdvice);
coll2.add("nihao");
System.out.println( coll2.size());
}
private static Object getProxy(final Object target,final Advice advice)
{
Object coll2=Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),//表示target的实现的接口
new InvocationHandler(){
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable
{
//long begin=System.currentTimeMillis();//增加的功能
advice.begin();
Object obj=method.invoke(target,args);
advice.end();
advice.total(method);
/*long end=System.currentTimeMillis();//增加的功能
System.out.println(method.getName()+"::"+(end-begin)+" ");*/
return obj;
}}
);
return coll2;
}
}
target.getClass().getClassLoader(),这个地方使用的接口的字节码加载器,这个地方是接口的加载器, 可是target.getClass()得到的不是接口啊,求详解?
target.getClass().getInterfaces(),这个地方接收的是接口字节码的数组,但是看了视频老师却这样写不太明白?
|