我举个例子来说明一下代理的原理:
现实生活的例子:我大学放假了,我想要去放松一下去海洋馆买个门票,我看见海洋馆门前坐个人,看起来就是卖票的,于是,我上他那去买票,于是,他出去一下说给我拿票来,在他去拿票的过程中又去找了另外一个人,那个人把票给他了,他把票给我了,可是在这个过程中我却什么都不知道,我知道我要拿票,他把票给我就ok了。
java中的例子:客户端用一个接口引用一个对象,然后用这个=接口去调用一些方法,表面上我只看到了这个接口的引用,而程序在运行的时候找的却是具体的对象,这就是多态,所以我完全可以将这个对象掉包,从而在里面做一些手脚,例如日志记录,性能统计,安全控制,事务处理,异常处理等。下面,这个例子就用代理技术对ArrayList这个类做了点手脚。
public class ArrayListProxy {
private Object target;
public Object getTarget() {
return target;
}
public Object createProxy(Object target) {
this.target = target;
return Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler(){
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("小样,我是病毒,今天我就要阻止你了,爱咋咋地");
Object result = method.invoke(getTarget(), args);
return result;
}
});
}
}
public class ProxyTest {
@Test
public void testProxy() {
Collection con = (Collection) new ArrayListProxy().createProxy(new ArrayList());
addElement(con);
}
public void addElement(Collection con) {
boolean flag = con.add("我要在这个集合里面添加元素,谁也拦不住,哈哈哈!!!");
System.out.println(flag);
}
}原文地址:http://blog.csdn.net/xlinsist/article/details/41819493