JFinal 项目于 2012 年开源,经过 8 年多的发展,用户数量高速增长,现在已经是最受欢迎的国产框架之一。自开源开始,每年 JFinal 都会在国庆长假发布一个新版本,今年的虽然来得晚了些,但也绝没有缺席。
今天就和 Gitee 一起看看八年后 JFinal 又有哪些新变化把。
项目名称:JFinal
项目作者:JFinal
开源许可协议:Apache-2.0
项目地址:https://gitee.com/jfinal/jfinal
项目简介
JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有 ruby、python 等动态语言的开发效率。
项目特点
- MVC 架构,设计精巧,使用简单
- 遵循 COC 原则,支持零配置,无 XML
- 独创 Db + Record 模式,灵活便利
- ActiveRecord 支持,使数据库开发极致快速
- 极简、强大、高性能模板引擎 Enjoy,十分钟内掌握 90% 用法
- 自动加载修改后的 Java 文件,开发过程中无需重启服务
- AOP支持,拦截器配置灵活,功能强大
- Plugin 体系结构,扩展性强
- 多视图支持,支持 Enjoy、FreeMarker、JSP、Velocity
- 强大的 Validator 后端校验功能
- 功能齐全,拥有传统 SSH 框架的绝大部分核心功能
- 体积小仅 777 KB,并且无第三方依赖
本次更新内容
以下内容节选自官方博客:https://www.oschina.net/news/119158/jfinal-4-9-02-released
1.enjoy 新增对中文表达式、变量名、函数名支持
这个需求在底层就是对中文标识符的支持,没想到提出这个需求的同学还挺多,光是 jfinal 俱乐部就有将近 10 人提出想要这个功能。
虽然我自己感觉这需求挺奇葩,但真实需求就必须要打破个人主观偏见,为用户创造价值更重要。
好在 jfinal 极简设计之下,添加这个功能也就 19 行代码的事,10 分钟内打完收工,添加中文标识符支持以后,可以这么来用了:
#(美女.身高) #define 中文函数名在此() #(中文变量名在此) #end
2.#number 指令、算术运算默认使用四舍五入
老版本的舍入默认用的银行家舍入法,这个在欧美用得较多,在国内四舍五入用得多,所以这个功能很重要。
此外,舍入方式可以配置,配置方法如下:
engine.setRoundingMode(RoundingMode);
3.#date 指令支持 LocalDateTime、LocalDate、LocalTime
老版本的 #date 指令只支持 java.util.Date 及其子类,虽说自行扩展也很容易,但官方提供可以进一步节省你的时间专注业务开发。
为了支持 LocalDateTime,索性对 com.jfinal.template.io.Writer 新增了针对 LocalDateTime 的 write 方法,这样便于在扩展 enjoy 指令时更方便处理 LocalDateTime。
4.ActionReporter 支持自定义扩展
这个需求提出很久了,起初我一直认为这个仅用于开发模式时输出一些有利于开发效率的信息,所以没处理这个需求。
但很多同学说他们将这个功能用于监控系统的运行情况,非常希望能自由扩展,好吧,加上。
扩展很简单,继承 ActionReporter,然后配置:
me.setActionReporter(ActionReporter);
5.Prop、PropKit 对返回值进行 trim() 操作
经过测试 key = value 格式的配置,对于等号两边的空格来说无论是否 trim(),结果是一样的。
但如果 value 右侧有空格,则会成为值的一部分,这类配置错误很难被肉眼发现,这个打磨有一定的价值,以后可以放心大胆的在 value 后方留空格了。
6.enjoy 支持 reentrant
这个需求绝大多数同学碰不到,目前为止也就一位同学有这个需求。简单来说就是有同学在模板渲染的过程之中再次获取一个新的模板进行渲染。由于 enjoy 内部有一个 ThreadLocal 的 buffer,所以 reentrant 的渲染会覆盖掉 buffer 中外层正渲染了一部分的数据。
剩下还有数十项细致打磨,在官网可以下载到完整的 changelog: https://jfinal.com。
如果你是今天第一次认识 JFinal,那么就点击后面的链接前往项目主页看看吧:https://gitee.com/jfinal/jfinal