JFinal源码走读_1_jfinal初始化

本文从JFinal的入口JFinalFilter开始,详细分析了JFinal的初始化步骤,包括核心初始化方法jfinal.init(),Config类的配置,如startPlugins()、url到action的映射、初始化Handler、Render、OreillyCos、I18n和TokenManager。整个初始化流程旨在建立配置读取、组件初始化,最终使得JFinal应用能够对外提供服务。
摘要由CSDN通过智能技术生成

jfinal的入口:

<filter>
        <filter-name>jfinal</filter-name>
        <filter-class>com.jfinal.core.JFinalFilter</filter-class>
        <init-param>
            <param-name>configClass</param-name>
            <param-value>com.demo.common.DemoConfig</param-value>
        </init-param>
    </filter>

    <filter-mapping>
        <filter-name>jfinal</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>  

demo项目中的web.xml定义的com.jfinal.core.JFinalFilter,是jfinal的核心拦截器,拦截所有请求,是所有web请求的入口。
fiter的生命周期决定,web程序启动时,其init()方法会被web容器自动调用,所以final的初始化就是从此处开始的。

init()

public void init(FilterConfig filterConfig) throws ServletException {
       // 1.根据web.xml中配置的configClass利用反射获取实例并向上转型为JFinalConfig。
        createJFinalConfig(filterConfig.getInitParameter("configClass"));

        // 2.根据web容器传入的filterConfig对象和上一步创建的jfinalConfig对象进行jfinal的初始化,
        // jfinal对象为Jfinal类的实例,JFinal为单例且被final修饰。
        if (jfinal.init(jfinalConfig, filterConfig.getServletContext()) == false)
            throw new RuntimeException("JFinal init error!");

        // 3.获取处理器handler
        handler = jfinal.getHandler();
        // 4.获取常量,此常量在createJFinalConfig()时被填充进Config对象,Config的所有域和方法都为static,预定义的config都为final
        constants = Config.getConstants();
        // 5.获取字符编码,默认为utf-8
        encoding = constants.getEncoding();
        // 6.回调函数,默认实现为空
        jfinalConfig.afterJFinalStart();

        // 7.获取contextPath,demo项目中contextPath为空
        String contextPath = filterConfig.getServletContext().getContextPath();
        // 8.根据contextPath得到contextPathLength,暂时不明contextPathLength用处
        contextPathLength = (contextPath == null || "/".equals(contextPath) ? 0
                : contextPath.length());
    }

步进分析

  1. 根据configClass常量利用反射得到实例并向上转型为父类JFinalConfig,利用了模板方法模式的思想
  2. jfinal核心初始化方法,后续详细探究
  3. 345678步如注释
jfinal核心初始化方法jfinal.init()分析
boolean init(JFinalConfig jfinalConfig, ServletContext servletContext) {
        this.servletContext = servletContext;
        this.contextPath = servletContext.getContextPath();

        // 1.初始化PathKit的webRootPath变量,为当前项目的绝对路径
        initPathUtil();

        // 2.配置Jfinal,configJfinal方法会配置用户自定义的constants,routs,plugins,handles,interceptors(全局拦截器)
        Config.configJFinal(jfinalConfig);

        // 3.获取自定义配置之后的constants
        constants = Config.getConstants();

        // 4.initActionMapping
        initActionMapping();
        // 5.initHandler
        initHandler();
        // 6.initRender
        initRender();
        // 7.initOreillyCos
        initOreillyCos();
        // 8.initI18n
        initI18n();
        // 9.initTokenManager
        initTokenManager();

        return true;
    }

1,3:如注释
4-9:随后具体分析


Config.configJFinal(jfinalConfig)分析
static void configJFinal(JFinalConfig jfinalConfig) {
        //
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值