注:下面的想法,是自己在看的时候一些疑问! 如对代码由 疑义 请看原贴![url] http://www.iteye.com/topic/32065 [/url]
[size=large]/**
*动态代理的好处就是当 顶层接口改变的时候,其Handler不会改变,
*Proxy返回的类就可以直接调用增加的方法
*而静态类需要更改实现类,才能调用新增加的方法。
*/
接口:
public interface IBusiness {
public void doBusiness();
public void doOtherBusiness();// 增加的方法!
}
静态:
public class BusinessProxy implements IBusiness {
BusinessImpl bi = null;
public BusinessProxy(BusinessImpl bi) {
this.bi = bi;
}
public void doBusiness() {
# System.out.println("事务、日志、权限等操作");
bi.doBusiness();
# System.out.println("事务、日志、权限等操作");
}
@Override
public void doOtherBusiness() {
# System.out.println("事务、日志、权限等操作");
bi.doOtherBusiness();
# System.out.println("事务、日志、权限等操作");
}//System.out.println("事务、日志、权限等操作"); :shock: 又写了两遍! :shock:
}
public void main(String[] args){... ... Proxy.doOtherBusiness();}
动态:
用InvocationHandler的好处就是 :o 无论执行哪个方法,都要到它所实现的invoke方法中,执行一次, :o 对于像上面标有 " # " 号的行,就只用 写一次。
public static void main(String[] args) {
BusinessImpl bi = new BusinessImpl();
IBusiness proxy = (IBusiness) Proxy.newProxyInstance(bi.getClass().getClassLoader(), bi.getClass().getInterfaces(),new BusinessHandler(bi));
proxy.doBusiness();
proxy.doOtherBusiness();
}[/size]