您的位置:首页 > 其它

源码有毒:Jfinal源码解析(四)

2016-08-08 17:17 232 查看
源码有毒:Jfinal源码解析(一)

源码有毒:Jfinal源码解析(二)

源码有毒:Jfinal源码解析(三)

private void initActionMapping() {
actionMapping = new ActionMapping(Config.getRoutes(), Config.getInterceptors());
actionMapping.buildActionMapping();
Config.getRoutes().clear();
}


在buildActionMapping()方法之后,把routes信息和拦截器装载到了actionMapping当中,并且把Config中的Routes信息制空,便于垃圾回收器回收。

回到JFinal的init方法

boolean init(JFinalConfig jfinalConfig, ServletContext servletContext) {
this.servletContext = servletContext;
this.contextPath = servletContext.getContextPath();

initPathUtil();

Config.configJFinal(jfinalConfig);  // start plugin and init log factory in this method
constants = Config.getConstants();

initActionMapping();
initHandler();
initRender();
initOreillyCos();
initTokenManager();

return true;
}


简单看下initHandler()

private void initHandler() {
Handler actionHandler = new ActionHandler(actionMapping, constants);
handler = HandlerFactory.getHandler(Config.getHandlers().getHandlerList(), actionHandler);
}


看下getHandler方法

public static Handler getHandler(List<Handler> handlerList, 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;
}


这里获取到了Constants中的HandlerList,和新创建的ActionHandler构建成了一个Handler链,并且返回链顶的Handler

initRender();中初始化了JFinal中的render视图信息

initOreillyCos();中则初始化了文件上传插件

回到JFinalFilter的init方法

public void init(FilterConfig filterConfig) throws ServletException {
createJFinalConfig(filterConfig.getInitParameter("configClass"));

if (jfinal.init(jfinalConfig, filterConfig.getServletContext()) == false)
throw new RuntimeException("JFinal init error!");

handler = jfinal.getHandler();
constants = Config.getConstants();
encoding = constants.getEncoding();
jfinalConfig.afterJFinalStart();

String contextPath = filterConfig.getServletContext().getContextPath();
contextPathLength = (contextPath == null || "/".equals(contextPath) ? 0 : contextPath.length());
}


init中接下来的代码就比较轻松了,为成员变量handler、constants、encoding、contextPathLength赋值,顺便调用了jfinalConfig.afterJFinalStart();方法,到这里整个框架的初始化完成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JFinal 源码