关于jfinal的inteceptor调用的问题。

发布于 2021-11-29 17:36:29 字数 2876 浏览 871 评论 0

@JFinal 你好,想跟你请教个问题:

我有在configInterceptor里面加了两个interceptor,就简单的打印一些调用信息。

@Override
	public void configInterceptor(Interceptors me) {
		// TODO Auto-generated method stub
		me.add(new Test1Interceptor());
		me.add(new Test2Interceptor());
	}




当有请求过来的时候,
ActionHandler里面的handle方法会创建相应的ActionInvocation

Controller controller = action.getControllerClass().newInstance();
controller.init(request, response, urlPara[0]);

if (devMode) {
    boolean isMultipartRequest = ActionReporter.reportCommonRequest(controller, action);
    new ActionInvocation(action, controller).invoke();
    if (isMultipartRequest) 
        ActionReporter.reportMultipartRequest(controller, action);
}

else {
    new ActionInvocation(action, controller).invoke();
}






创建完ActionInvocation之后,调用相当的invoke方法。但是在invoke方法里面

 public void invoke() {
     if (index < inters.length)
         inters[index++].intercept(this);
     else if (index++ == inters.length)	// index++ ensure invoke action only one time
     // try {action.getMethod().invoke(controller, NULL_ARGS);} catch (Exception e) {throw new RuntimeException(e);}
     try {
         action.getMethod().invoke(controller, NULL_ARGS);
     }
     catch (InvocationTargetException e) {
         Throwable cause = e.getTargetException();
         if (cause instanceof RuntimeException)
                throw (RuntimeException)cause;
         throw new RuntimeException(e);
     }
     catch (RuntimeException e) {
         throw e;
     }
     catch (Exception e) {
         throw new RuntimeException(e);
     }
 }


这里面,由于inters.length的值为2(上面加了两个interceptor),导致else if里面的


action.getMethod().invoke(controller, NULL_ARGS);

执行不了。我调试跟进去也确实是这样。


请问是我的理解或是写法有误吗?? 希望能回复指点一下,谢谢。



如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文