代理模式和拦截过滤器模式

代理模式:https://my.oschina.net/huangyong/blog/159788

拦截过滤器模式:Servlet 的 Filter Chain 的设计模式,它是“责任链模式”的一种变体,在 JavaEE 设计模式中命名为“拦截过滤器模式”。

                            https://my.oschina.net/huangyong/blog/170494

ProxyChain类

public void doProxyChain() {
        if (currentProxyIndex < proxyList.size()) {
        	 Proxy proxy = proxyList.get(currentProxyIndex++);
        	 proxy.doProxy(this);
//            proxyList.get(currentProxyIndex++).doProxy(this);
        } else {
            try {
                methodResult = methodProxy.invokeSuper(targetObject, methodParams);
            } catch (Throwable throwable) {
                throw new RuntimeException(throwable);
            }
        }
    }

AbstractProxy类

注意这一点:doProxy,前两次执行的before一次是子类的before一次父类的before

   public final void doProxy(ProxyChain proxyChain) {
        Class<?> cls = proxyChain.getTargetClass();
        Method method = proxyChain.getTargetMethod();
        Object[] params = proxyChain.getMethodParams();

        begin();
        try {
            if (filter(cls, method, params)) {
                before(cls, method, params);//步骤一
                proxyChain.doProxyChain();  //步骤二
                after(cls, method, params); //步骤三
            } else {
                proxyChain.doProxyChain();
            }
        } catch (Throwable e) {
            error(cls, method, params, e);
        } finally {
            end();
        }
    }

从ProxyChain类里开始讲起:

proxyList.get(currentProxyIndex++).doProxy(this);即

Proxy proxy = proxyList.get(currentProxyIndex++);

proxy.doProxy(this);

第一次ProxyChain类里proxy.doProxy(this); 

此时proxy为beforeProxy ,

执行到AbstractProxy类的doProxy里的before(步骤一),执行的是子类的before


执行AbstractProxy类的 proxyChain.doProxyChain();(步骤二)


再一次执行到ProxyChain类里proxy.doProxy(this); 

此时proxy为afterProxy

再一次执行到AbstractProxy类的doProxy里的before(步骤一),此时的before不是子类的了,而是父类的,因为此时proxy为afterProxy,afterProxy里没有before,只有执行父类的before




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

菠萝科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值