在水木回一個大牛的帖子討論攔截器,也發(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ī),也有控制其是否能走下去的能力。
一家之言。