jfinal.2.2源码阅读(二)jfinal ActionHandler 处理器

jfinal.2.2源码阅读(一)jfinal 核心拦截器 ActionHandler

上一篇说道了jfinal核心拦截器JFinalFilter拦截到请求后会调用处理器来处理请求。jfinal.2.2源码阅读(一)jfinal 核心拦截器 JFinalFilter

handler.handle(target, request, response, isHandled);

那么这个handler就是我们今天要讲的主题ActionHandler。

1、它是什么时候被初始化的?初始化的是那个实现类?

上一张中我们说到了 JFinalFilter.init 初始化的时候 调用了 JFinal.init() 函数进行初始化

在JFinal.init() 函数中又调用了 JFinal.initHandler() 函数

private void initHandler() {//第一步先创建了一个ActionHandler并且传入actionMapping(路由映射),和constants(常量配置)Handler actionHandler = new ActionHandler(actionMapping, constants);// 经过 HandlerFactory.getHandler 处理并且返回一个 handler 对象并且赋值给当前 JFinal类的 成员变量handler// Config.getHandlers().getHandlerList() 返回的是在 JFinal.init 函数中调用的// Config.configJFinal(jfinalConfig); 返回的是用户在 JFinalCongig 中配置的处理器列表。handler = HandlerFactory.getHandler(Config.getHandlers().getHandlerList(), actionHandler);}

在来看看 HandlerFactory.getHandler 函数都做了什么?

public static Handler getHandler(ListhandlerList, Handler actionHandler) {

Handler result = actionHandler;

for (int i=handlerList.size()-1; i>=0; i--) {

Handler temp = handlerList.get(i);

temp.next = result;

temp.nextHandler = result;

result = temp;

}

return result;

}

上面的代码其实很简单,其实就是使用 Handler中的 next 属性把用户配置的处理器倒叙一个一个的串联起来。并且在最后加上actionHandler处理器。然后返回用户配置的第一个处理器。(所以用户自己实现的处理器最后都得调用next.handle函数否则执行不到 ActionHandler 处理器,也就没法分配指定的控制器Controller执行业务逻辑)总之最后会一直执行到ActionHandler.handle函数

你可能感兴趣的:(jfinal.2.2源码阅读(二)jfinal ActionHandler 处理器)