在水木回一個大牛的帖子討論攔截器,也發(fā)到這里。

所謂攔截,是新媳婦回娘家,路遇強(qiáng)盜。重要的是她能不能回家已經(jīng)取決與強(qiáng)盜而不是自己。看下面的代碼:

 

interface AbcInterceptor{

    
boolean beforeExecute(Context context,Command cmd);

    
void afterExecute(Context context,Command cmd);

}

 

我認(rèn)為這個所謂的攔截器其實名不符其實。原因是這強(qiáng)盜太弱了,他無法阻止新媳婦回娘家,所以也就無所謂攔截,撐死是路邊的野草在新媳婦經(jīng)過的時候擺了擺頭——所謂觸發(fā)的事件而已。

真正的攔截器該是這樣:

 

interface RealInterface{

    
void intercept(Context context,Command cmd);

}

 

看Xwork的代碼會比較清楚。這樣的攔截,才所謂攔截,可憐的人兒能不能見到她娘已經(jīng)完全掌握在強(qiáng)盜的手里——在強(qiáng)盜的作用下,她可能根本回不了家,也可能被賣了還對外說自己回到了娘家。

XWork里面其實每個interceptor的intercept方法大多要調(diào)用actionInvocation.invoke()方法,來完成攔截器鏈?zhǔn)秸{(diào)用。而ServletFilter里面也大多要寫一個chain.doFilter(..)。這里面其實有正主執(zhí)行前后的玄機(jī),也有控制其是否能走下去的能力。

一家之言。