JFinal 4.2 发布,一个 jar 包走天涯

JFinal
 JFinal
发布于 2019年06月06日
收藏 104

    JFinal 此前唯一的第三方依赖在添加业务层 AOP 时被引入,本次 4.2 版本就是要干掉这唯一的第三方依赖,从此一个 jar 包走天涯

    JFinal 4.2 新增的 proxy 模块仅用 628 行代码就干掉了 19505 代码量的 cglib-nodep。被干掉的 cglib 代码量是 JFinal proxy 的 31 倍。cglib-node 的代码量:

    JFinal proxy 代码量:

 

    至此,一个无第三方依赖的 MVC + ORM + AOP + Proxy + Template Engine,各模块都极度轻量级的应用开发框架由此诞生,史无前例

    JFinal 历经八年时间的创新与迭代,轻量级到何等可怕的程度,数据说话:

1、JFinal VS Spring

    Spring 是当前最流行的开源框架之一,其代码量十分惊人:

    Spring 超过 32 万行的代码量显然已不再是当年所认为的轻量级框架

    JFinal 代码量:

    Spring 324816 行代码,是 JFinal 28024 行代码的 11.59 倍

    注:为确保公平,已删掉 Spring 中所有 test 目录下的代码,否则 spring 代码量为 632096 行,将是上述 32 万代码量的两倍左右

2、JFinal VS Spring Boot

    Spring Boot 依赖于 Spring 构建,其本质仅是在 Spring 的基础上套个外壳来简化 Spring 的繁琐开发,其代码量如下:

    虽然 Spring Boot 仅是在 Spring 之上做了点有利于开发便利性的二次封装,但代码量仍然不少,为 29583 行

    注意:为确保公平,上面截图仅仅统计 spring boot 中的一个子项目(注意上图中左侧箭头指向的子项目名),并去掉了 test 代码,否则代码量将是惊人的 275527 行,截图如下:

    spring boot 作为简化 Spring 开发的 "壳" 的存在,所以基于它开发的项目,必有大量的 jar 包依赖,以它官方最简单的 hello world demo 为例(demo代码送门),其打包出来的 jar 包数量十分惊人:

    一个啥正事也没干的 demo 居然需要 33 个 jar 包依赖,19 M 的体积,如果要添加 AOP、ORM、Template Engine 等常用功能,jar 量还将大量增加

    而其同等功能的 jfinal 项目则大为不同:

    同等 demo 之下,spring boot 打包后依赖 33 个 jar 包,而 JFinal 只有一个 jar 包。Spring Boot 的 jar 包依赖数是 JFinal 的 33 倍

    jar 包体积的对比,先上 Spring Boot 的:

     再上 jfinal 的:

      Spring Boot 的 jar 包体积是 19MB,是 JFinal 716KB 的 27 倍。更少 jar 包意味着运行时更低的内存占用,更轻量级。

3、JFinal Template Engine VS FreeMarker

    FreeMarker 是应用最广泛的 java 模板引擎之一,其代码量如下:

    仅模板引擎一个功能,代码量就超过 5 万行之巨,不得不说代码量非常之高

    而 JFinal 模板引擎仅作为其 template 的一个子模块存在,代码量如下:

    FreeMarker 55018 行代码,是 JFinal Template Engine 8858 行代码的 6.21 倍

4、JFinal ORM VS Hibernate

    Hibernate 是老牌的 Java ORM 框架,应用十分广泛,其代码量如下:

    为确保公平,只统计其 hibernate-core 模块的代码量,其代码量为 263530 行,作为 ORM 的 core,其超过 26 万行的代码量,令人震惊

    以下是 JFinal ORM 的代码量:

    hibernate-core 模块 263530 行代码,是 JFinal ORM 6849 行代码的 38.47 倍

5、轻量级的意义

    为什么 JFinal 迭代八年,一直如此严苛地坚持轻量级,坚持小而精?在保障代码简洁、清晰的前提下,代码量少的好处非常多,为节省时间,在此仅简单提几点:

  • 完全掌控

    整体才 28024 行代码,使得用户完全掌控变得十分容易。完全掌握意味着你可以随心所欲地扩展、定制,在碰到问题时可迅速定位解决

    相比 Spring 的几十万行代码量,再加上其很多组件都是六七层的类层次关系,要读懂源码都会十分困难,更别提完全掌控

  • 降低 bug 率

      好比言多必失,代码量越大,出错的概率必然越大。代码量少,意味着 bug 概率的降低

  • 提升可维护性

      在保障可读性的前提下,代码量越少,在添加、修改功能时,所花成本必然越少

  • 低成本、高效率

      代码简洁、量少,学习成本下降,开发效率提升,运行效率也将提升。为自由开发者和创业公司提升竞争力,降低成本

6、JFinal 4.2 重要新功能

    以上是干掉最后一个第三方依赖后的轻量级方面的总结与对比,4.2 新版本还添加了很多好用的新功能:

6.1、新增 proxy 模块

    proxy 首要目标是实现动态代理,从而实现 AOP。 JDK 的动态代理机制必须要实现接口,显然该 pass 掉。另外常见的代理方案是使用 cglib、asm 等字节码增强方案,这类方案需要依赖第三方,并且操作字节码的代码可读性极差,也被 pass 掉

    JFinal 的 proxy 采用任何地方都不可能见到的全新设计:Enjoy、Class Loader、Dynamic Compile 美妙结合,628 行代码打完收工(源码传送门)

    proxy 模块处于 jfinal AOP 的底层,对开发者完全透明,无学习成本

6.2、Db 新增 template 系方法

    JFinal 4.2 还针对 sql 模板功能添加了 template 系列 API,可减少此类用法 50% 的代码量,sql 模板功能在这之前是这么用的:

SqlPara sqlPara = Db.getSqlPara(sqlKey, 123);
Db.find(sqlPara);

    使用新增 template 系的方法以后可以这么来用:

Db.template(sqlKey, 123).find();

6.3、model 新增 template 系方法

    同理 model 也添加了 template 方法: 

dao.template(sqlKey, 123).find();

    本次 JFinal 4.2 自上次新版本发布以来,共有 39 项增强与改进,限于篇幅在此不再赘述,可以在官网下载最新版本的 jfinal-4.2-changelog.txt

    极速升级到 4.2 的文档也准备妥当,十分平滑,传送门:https://www.jfinal.com/doc/14-1

 

ONE MORE THING:

    值此 JFinal 4.2 新版发布之际,jfinal.com 官方网站也已全新改版。改版后的整站源代码作为 jfinal 俱乐部的专享福利已经可以下载,下载传送门:https://www.jfinal.com/club

 

 

 

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 OSCHINA 社区 [http://www.oschina.net]
本文标题:JFinal 4.2 发布,一个 jar 包走天涯
加载中

精彩评论

巴拉迪维
巴拉迪维
再次前来为波总打 call 。。。作为一个老 Javaer 我不得不说:JFinal 是国内最优秀的 Java 开源框架,没有之一!
JFinal
JFinal
简单、无依赖,轻装上阵,大道至简
山东-小木
山东-小木
从JFinal1.x开始 在JFinal上一直没吃过版本升级不兼容的亏,每次都是极其平滑升级。数据猫项目已经更新使用了最新JFinal技术栈。
JBolt插件明天也会发布新版本,支持最新的JFinal环境生成。
青苗
青苗
JF 是一个优秀的框架,但是各种【 ... 虽然 Spring Boot 仅是在 Spring 之上做了点有利于开发便利性的二次封装,但代码量仍然不少,为 29583 行 ... 】 类似代码量比较有何意义 ? 低调低调低调 踏踏实实的做好产品我觉得用户的多少就是最好的口碑
有害健康
有害健康
N年前做的老项目,采用的SSM,感觉myBatis用的很烦。接触到jFinal后,发现Db和ActiveRecord用的太爽了,后来系统增加新的模块,就直接把jFinal整合进去了。一直没太关注jFinal的版本,没想到已经升级到4.2了,居然连依赖包都不需要了。打call...

最新评论(170

neko77
neko77
代码量 == 代码质量吗?想让系统崩,一行有bug的代码就够了哟😄
水溶C100
水溶C100
JFinal ORM只能算半个ORM吧。。
blackshow
blackshow
统计代码行数是啥工具?
JFinal
JFinal
用的这个工具:https://github.com/cgag/loc/releases

windows、linux、mac 下都有编译版本
八一菜刀
八一菜刀
为JFinal打call,要完善生态圈就更强大了~!!
提醒加班小助手
提醒加班小助手
又想骗我学框架
-外星人-
-外星人-
生成代码,实时编译,再加载 ,有点风骚,不会卡吗
JFinal
JFinal
被代理的类只会被编译一次、类加载一次,整个过程是一次性的,头一次确实会稍慢一点

后续使用时全是方法调用级别的性能,比 java.lang.reflect.Method.invoke(...) 性能高得多
青苗
青苗
JF 是一个优秀的框架,但是各种【 ... 虽然 Spring Boot 仅是在 Spring 之上做了点有利于开发便利性的二次封装,但代码量仍然不少,为 29583 行 ... 】 类似代码量比较有何意义 ? 低调低调低调 踏踏实实的做好产品我觉得用户的多少就是最好的口碑
JFinal
JFinal
jfinal 多数情况是三个月到半年才发布一个新版本,注意回看一下,上次发文是在 4 个多月以前:
https://www.oschina.net/news/104145/jfinal-3-6-released

即便发新版本,也仅仅是在 oschina 推送一条更新的新闻,除此之外,从来不做任何宣传

其实已经足够、足够、足够低调了,即便这样低调,jfinal 社区光是注用户都将近十万人,全凭口碑发展起来

发布的更新新闻让人有高调的感觉,我想可能是下面的原因:
1:有些国人始终不自信,始终觉得老美的开源是最牛逼的
2:有些 jfinal 新版本首先是打动我自己,我最清楚这里头的创新与努力,所以新闻中的这份打动的情感传递给了读者

但是请问? 一个好的产品,如果连自己都打动不了,谈何打动用户
网瘾少年徐志摩
网瘾少年徐志摩
一个人开发的东西能和上百人的团队竞争,太厉害了叭
YJ1212
YJ1212
这样吹捧 贬低 spring好吗
JFinal
JFinal
全程都是数据说话,哪里来的吹捧一说,更没有贬低 spring,spring 有很多优点,我自己使用 Spring 长达三年半

如果用数据说话,居然伤害到 spring 用户,对此我感到抱歉

比较都是有维度的,spring 在生态、用户量维度要比 jfinal 好

当 jfinal 在比较轻量级这个维度时,并没有在否定 spring 的其它好的维度,文章篇幅有限,主题必须要有个着重点,不可能全面

例如,jfinal 3.3 版本,主题是性能:https://www.oschina.net/news/90815/jfinal-3-3
后海
后海
发来核电
返回顶部
顶部