黑马程序员技术交流社区
标题:
动态代理问题
[打印本页]
作者:
冬天的热带鱼
时间:
2013-12-24 16:27
标题:
动态代理问题
下面代码中的ArrayList 类型的target怎么理解为是目标呢?这点儿不理解。
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{
long beginTime = System.currentTimeMillis();
Object value = method.invoke(target, args);
long endTime = System.currentTimeMillis();
System.out.println(method.getName()+" running time of "+(endTime - beginTime));
return value;
}
}
);
proxy3.add("zhangsan");
proxy3.add("lisi");
proxy3.add("wangwu");
System.out.println(proxy3.size());
作者:
末末
时间:
2013-12-24 16:35
这个是给collection代理,只能他的子类才能做目标类,也可以将目标抽取出来,不过代码就要改变了
这下面的代码是张老师讲的时候,我根据他讲的理解着写的
public class ProxyDemo
{
public static void main(String[] args)
{
Collection set=new HashSet();
Collection set2=(Collection)show(set,new myAdvice());
set2.add("one");
set2.add("klds");
System.out.println(set2.size());
}
public static Object show(final Object target ,final Advice advice)
{
Object obj=Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler()
{
public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
advice.beforMethod();
Object reVal=method.invoke(target, args);
advice.afterMethod();
return reVal;
}
}
);
return obj;
}
}[code]public class myAdvice implements Advice {
public void beforMethod() {
System.out.println("方法前");
}
public void afterMethod() {
System.out.println("方法后");
}
}[code]
public interface Advice
{
void beforMethod();
void afterMethod();
}
复制代码
[/code][/code]
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2