2021SC@SDUSC


目录

一、jpress-core基本信息

1.pom.xml

2.jpress-core目录

二、JPressCoreInitializer

1.onConstantConfig

2.onRouteConfig

3.onHandlerConfig

4.onEngineConfig

5.onInterceptorConfig

6.onStart


一、jpress-core基本信息

1.pom.xml

jpress-core是JPress的核心代码。作为一个maven子项目,要研究Jpess-core的代码结构,先要了解其pom.xml文件,大概知道Jpess-core的基本信息,集成了什么框架,使用了什么依赖。

jpress-core的pom.xml文件如下:

<dependencies><dependency><groupId>io.jboot</groupId><artifactId>jboot</artifactId></dependency>
​<dependency><groupId>com.jfinal</groupId><artifactId>jfinal-weixin</artifactId></dependency>
​<dependency><groupId>io.jpress</groupId><artifactId>jpress-model</artifactId></dependency>
​<dependency><groupId>io.jpress</groupId><artifactId>jpress-service</artifactId></dependency>
​<dependency><groupId>io.jpress</groupId><artifactId>jpress-commons</artifactId></dependency>
​<dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId></dependency>
​
<!--        <dependency>-->
<!--            <groupId>ch.qos.logback</groupId>-->
<!--            <artifactId>logback-core</artifactId>-->
<!--        </dependency>-->
​
<!--        <dependency>-->
<!--            <groupId>ch.qos.logback</groupId>-->
<!--            <artifactId>logback-classic</artifactId>-->
<!--        </dependency>-->
​
​<dependency><groupId>junit</groupId><artifactId>junit</artifactId><scope>test</scope></dependency>
<!--        <dependency>-->
<!--            <groupId>net.sf.ehcache</groupId>-->
<!--            <artifactId>ehcache</artifactId>-->
<!--        </dependency>-->
​</dependencies>

可以看到,jpress主要依赖的框架为jboot、jfinal,用于web开发。其次是commons-io、jpress-commons两个工具类,以及jpress其他子模块jpress-service(JPress非业务 service 接口定义)、jpress-model(JPress非业务实体类)。

2.jpress-core目录

在io.jpress包下有两个文件夹——core、web,以及一个JPressCoreInitializer类Java文件。

JPressCoreInitializer为Jpress-core模块的初始化类。

core包和web包包含了其他核心的组件,是我们分析的主要代码。

二、JPressCoreInitializer

JBoot在启动时会扫描类路径中是否存在继承JbootAppListenerBase的类,如果有,则会初始化这个类,并执行其中的钩子方法,因此可以通过继承JbootAppListenerBase类实现启动任务。一个应用在可以存在多个继承至 JbootAppListenerBase 的类,这样更加方便团队配合和模块化开发,每个团队(或模块)都可以有自己的配置类,不会造成代码冲突。

jpress-core中的JPressCoreInitializer继承了JbootAppListenerBase类,而JbootAppListenerBase类实现了JbootAppListener接口。

JPressCoreInitializer最终重写了JbootAppListenerBase的以下方法:

//对应 JFinalConfig 的 configConstant
public void onConstantConfig(Constants constants) ;
​//对应 JFinalConfig 的 configRoute
public void onRouteConfig(Routes routes);
​//对应 JFinalConfig 的 configHandler
public void onHandlerConfig(JfinalHandlers handlers) ;
​
//对应 JFinalConfig 的 configEngine
public void onEngineConfig(Engine engine);
​//对应 JFinalConfig 的 configInterceptor
public void onInterceptorConfig(Interceptors interceptors) ;
​
//对应 JFinalConfig 的 onStart()
public void onStart() ;

可以发现,JPressCoreInitializer对应的就是JFinalConfig的配置类信息,从这里也可以看出,Jboot 是一个基于 JFinal的微服务框架。现在开始具体分析JPressCoreInitializer的各个具体实现方法。

1.onConstantConfig

此方法用来配置JFinal常量值,具体设置看以下注解

@Override
public void onConstantConfig(Constants constants) {//对 render 的扩展与定制constants.setRenderFactory(new JPressRenderFactory());//配置验证码缓存 cache,配置成集中共享缓存可以支持分布式与集群constants.setCaptchaCache(new JbootCaptchaCache());
}

其中JPressRenderFactory对象为jpress-core包下的一个对象,其继承了JbootRenderFactory,重写了对错误页面渲染和对模板页面渲染的功能。

2.onRouteConfig

此方法用来配置访问路由,具体设置看以下注解

@Override
public void onRouteConfig(Routes routes) {//配置是否在路由映射完成之后清除内部数据,以回收内存,默认值为true.设置为false通常用于在系统启动之后,仍然要使用 Routes 的场景,例如希望拿到Routes 生成用于控制访问权限的数据routes.setClearAfterMapping(false);
}

3.onHandlerConfig

此方法用来配置JFinal的Handler,如下代码配置了名为xxxHandler的处理器,Handler可以接管所有web请求,并对应用拥有完全的控制权,可以很方便地实现更高层的功能性扩展。

@Override
public void onHandlerConfig(JfinalHandlers handlers) {//jpress安装处理器handlers.add(new InstallHandler());//网站地图处理器handlers.add(new SitemapHandler());//伪静态处理器handlers.add(new JPressHandler());// JPress 网站的 URL 管理器,主要是用于://1、处理伪静态的问题//2、处理扁平化 URL 的问题,也就是全站 URL 转为为 /xx-xx-1.html ,不再有 "/" 这个符号 ,更加有利于 SEOhandlers.add(new FlatUrlHandler());//插件处理器handlers.add(new AddonHandlerProcesser());//插件控制handlers.setActionHandler(new AddonControllerProcesser());
}

4.onEngineConfig

此方法用来配置Template Engine

@Override
public void onEngineConfig(Engine engine) {//向jfinal模板引擎中添加了jpress-core包下的静态方法engine.addSharedStaticMethod(JPressCoreFunctions.class);
}

5.onInterceptorConfig

configInterceptor 方法用来配置全局拦截器

@Override
public void onInterceptorConfig(Interceptors interceptors) {//配置作用于jfinal控制层的全局拦截器//utm拦截器interceptors.add(new UTMInterceptor());//Api拦截器interceptors.add(new JPressInterceptor());
}

6.onStart

在 JFinalConfig 继承类中可以添加 onStart() ,JFinal 会在系统启动完成之后回调这个方法,让jpress的各种继承自JbootEventListener的管理器初始化,而每一个管理器的具体任务我们之后的博客再分析。

@Override
public void onStart() {
​SitemapManager.me().init();MenuManager.me().init();WechatAddonManager.me().init();AddonManager.me().init();
​
}

【JPress】jpress-core架构相关推荐

  1. Intel Core Enhanced Core架构/微架构/流水线 (15) - 先进智能缓存

    Intel® Advanced Smart Cache 为了支持单基模上的双处理器核,Intel Core微架构提供了许多优化特性.两个核共享一个二级缓存和总线接口单元,下图中绿色部分标出.本节讲述I ...

  2. Intel Core Enhanced Core架构/微架构/流水线 (14) - 存储器/内存读写 Memory Load/Store

    Loads 当指令从回写类型的存储器中读取某个地址时,处理器会按照如下的规则从高速缓存或存储器中查找数据(确切的说是匹配地址): 发起核(即执行读存指令的处理器核)的一级数据缓存 其他核的一级数据缓存 ...

  3. Intel Core Enhanced Core架构/微架构/流水线 (13) - 存储转发/访存消歧

    Store forwarding 如果一个读存操作紧跟着写存操作且这两条指令操作同一个内存地址,Intel Core微架构可以直接将写存操作的数据转发给读存操作指令.这个过程被称为存储到读取转发机制, ...

  4. Intel Core Enhanced Core架构/微架构/流水线 (12) - 数据预取

    Data Prefetch to L1 Caches Intel Core微架构提供了2个硬件预取器,可以将数据预取到一级缓存中,由此加速程序访问数据的速度: 数据缓存单元预取器(DCU prefet ...

  5. Intel Core Enhanced Core架构/微架构/流水线 (11) - 高速缓存读/写操作 Cache Load/Store

    Loads and Stores Intel Core微架构在每个周期可以同时执行最多1条128位读存操作和1条128位写存操作,这两条操作需要访问不同的存储器地址.Core微架构的乱序访存操作允许与 ...

  6. Intel Core Enhanced Core架构/微架构/流水线 (10) - 先进存储器访问

    Intel® Advanced Memory Access Intel Core微架构中的每个处理器核都包含一个指令缓存和一个一级数据缓存.两个处理器核共享一个2M或4M字节大小的二级混合式缓存(既存 ...

  7. Intel Core Enhanced Core架构/微架构/流水线 (9) - 执行单元发射口旁路时延

    Issue Ports and Execution Units 通过发射口,调度器可以每周期分发6条微指令.Intel Core微架构和Enhanced Intel Core微架构的发射口以及支持的操 ...

  8. Intel Core Enhanced Core架构/微架构/流水线 (8) - 执行核

    Execution Core Intel Core微架构的执行核是超标量的,且可以乱序处理指令.注意:这里没有使用乱序执行指令,用的是乱序处理指令."处理"在这里包括对指令的寄存器 ...

  9. Intel Core Enhanced Core架构/微架构/流水线 (7) - 栈指针跟踪器/微熔合

    Stack Pointer Tracker Intel 64和IA32架构上有几个用于参数传递以及过程进入与退出的常用指令:PUSH,POP,CALL,LEAVE和RET.这些指令隐式得更新栈指针寄存 ...

  10. Intel Core Enhanced Core架构/微架构/流水线 (6) - 指令预译码/指令队列/指令译码

    Instruction PreDecode 指令预译码器从指令Cache或者指令预取缓存区中接收16字节的指令流,执行如下的预译码操作: 确定每条指令的长度(注:x86指令是变长指令) 译码每条指令的 ...

最新文章

  1. Linux中环境变量与文件查找
  2. python开发好学吗-python难学吗
  3. Ubuntu15.10安装XAMPP
  4. pycharm不能输入代码或删除代码
  5. LWIP源代码文件目录解析
  6. 《机器学习实战》学习总结(三)朴素贝叶斯在文本分类的应用
  7. js 内存引用计数_快速内存管理–自动引用计数
  8. Collectors.collectingAndThen()
  9. Atitit 判断判断一张图片是否包含另一张小图片
  10. 阿尔伯塔大学计算机科学的申请条件,阿尔伯塔大学计算机科学硕士专业
  11. html+css3跑马灯(抖音我们的照片记录幸福到永远)
  12. 微信小程序:云开发开通
  13. sql注入bypass方法
  14. 磁力机航向角计算与补偿
  15. dashboard的yaml配置文件
  16. 阿里云手机号归属地获取
  17. SettingsProvider单编生效
  18. CDR中没有导出为HTML,CDR导出文件时没有格式选项和储存目录,是怎么回事?
  19. Java枚举类型代码解析
  20. 联想微型计算机主机拆卸流程,小机箱大内涵 联想投影电脑610S拆解

热门文章

  1. 用python turtle画人_家里蹲太孤单?用 Python 画一只单身狗
  2. MySQL之23:59:59进位
  3. matlab randn 范围,matlab randn 范围
  4. 真人踩过的坑,告诉你避免自动化测试常犯的10个错误
  5. MAC清除Launchpad 应用程序 图标
  6. 新冠肺炎的诊断与临床症状
  7. vue+环信客服前端对接
  8. 一个IT实习生的感悟
  9. win10打开谷歌浏览器chrome,并进入kiosk模式
  10. Pearl Pairing