JFinal 4.9.02 发布,App&Coffee 重磅上线

JFinal
 JFinal
发布于 2020年10月13日
收藏 9

   每年国庆长假 jfinal 都会升级一个新版本,今年也不例外。前几天有事被耽误,今天正式推送新版本通知。

   这次国庆同时升级的项目有 jfinal、jfinal-undertow、jfinal-weixin、enjoy、activerecord。

   在国庆假期已全部推送到了 maven 中心库,可以直接升级使用。

   本次升级清扫了积累了很长的待开发列表,大多来自同学们的需求与反馈。新版本以细致打磨为主,但也不乏一些有意思的功能。

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 中外层正渲染了一部分的数据。

7、JFinalJson 支持 reentrant

   情况与 enjoy 的 reentrant 相似。

8、改进 enjoy 中 Compressor 的压缩算法

   代码量减少了将近 50%,可读性更好,性能更高,压缩率更高,压缩 sql 模板格式更美观,sql 压缩配置方法:

activeRecordPlugin.getEngine().setCompressorOn(' ');

9、改进 RedirectRender 对 nginx 反向代理时的支持

   简单说就是 nginx 代理了 https,而 nginx 与应用之间走的是 http,这个改进可以让 redirect(...) 仍然重定向到 https 而非 http。

10、新增 TimeKit 用于简化 JDK 8 新增的时间 API

  JDK 8 处理时间的 API 虽然有很大进步,但用起来还是啰嗦,TimeKit 去除了一些中间步骤,让功能一步到位,触手可及。

   TimeKit 一直是用在具体的项目之中,用得多了干脆就转移到 jfinal 中来,独享不如共享。

11、Render 实现类添加 flush() 操作

    极少数同学反馈在有些部署场景之下,客户端接收不到数据,在 render 中添加 flush() 可解决。

   添加 flush() 解决上述问题的同时,还可以缩短客户端响应延迟,这个打磨有一定的价值,适应更复杂的部署环境。

12、enjoy buffer 默认值改为 1024

   老版本的默认值为 2048,buffer 大些性能会高点,但响应延迟也会高点,缩小为 1024 在高性能与低延迟上更平衡,仍是打磨。

 

   剩下还有 27 项细致打磨,为节省大家时间,在这就不一一细说了,在官网可以下载到完整的 changelog: https://jfinal.com

   比 jfinal 新版本发布重要得多的事情是 jfinal 社区计划很久的 App&Coffee 频道上线了。

   App&Coffee 全称是 Application And Coffee,简单说就是 jfinal 官方和俱乐部打造精致有用的 Application,有需要的同学可以通过给作者来一杯咖啡得到授权,称之为 "咖啡授权"。

   App&Coffee 承载了 jfinal 的生态梦想,最终能不能成,就看你是否愿意请作者喝杯咖啡了,写出好代码哪能没有咖啡加持 ^_^

   ONE MORE THING:为了进一步大幅度提升开发效率,jfinal 官方已经介入前端,打造一个 jfinal 极简风格的前端框架,前后端同时极速开发将成为现实。新鲜出炉的 jfinal-kit.js 极简前端框架已发布,伴随的第一个应用已经诞生。详情请移步:https://jfinal.com/app/1

   

本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。
转载请注明:文章转载自 开源中国社区 [http://www.oschina.net]
本文标题:JFinal 4.9.02 发布,App&Coffee 重磅上线
加载中

精彩评论

杜福忠
杜福忠
中文编程带感!用jfinal已经5年了,一直跟进最新骚操作,越来越好用了!回家创业也是第二年了,加油干!
山东-小木
山东-小木
已经使用7年多,几十个中小项目,最近开发的平台产品 终身制用户已经300成员 大部分是企业客户 JFInal一如既往的稳定高效 是我们敢打敢拼的后盾
巴拉迪维
巴拉迪维
詹总V5
理工男海哥
理工男海哥
#Jboot# 已经第一时间更新,波总 V5
vk567
vk567
不错,用起来了已经

最新评论(35

wwwcom
wwwcom
不错,不错,后面项目用新版本。感谢詹总不断带来的惊喜。
SuperEric
SuperEric
细心的波总,越来越细致。祝愿App&Coffee红红火火~~
JFinal
JFinal
骨灰级资深用户,多多支持啊
简单代码
简单代码
有范例讲解吗?
littleant
littleant
越来越好用
W
WindSpeed
开个玩笑
山东-小木
山东-小木
已经使用7年多,几十个中小项目,最近开发的平台产品 终身制用户已经300成员 大部分是企业客户 JFInal一如既往的稳定高效 是我们敢打敢拼的后盾
TerryZ
TerryZ
波总厉害了
JFinal
JFinal
在 controller 内使用 before、after 这种风格无法实现 Interceptor 的很多特性

兼容性极端重要,否则 java 开发者的用户量不可能这么大

controller 是否本单例,这个从本质上来说无法避免,controller 可以做成单例,这样就可以避免创建对象,从而提升性能。 但这样做必然会冒出来一个类似于 ActionContenxt 这样的东东承载 request、response、session 这类东东,所以为啥我说本质上无法避免

你可以看看别的让 controller 成为单例的框架,它是在另一个地方又绕回来了

最后,jfinal 为了避免创建 controller 来提升性能,其实是提供了一个 FastControllerFactory 的,可以这样用:
me.setControllerFactory(new FastController());

没有使用单例模式,而是使用了类似对象池的形式,化解了你的需求
齿
齿轮1
我希望@Beforre,@clear所指代的服务,不一定要用注解,用Controller自身就可以,直接重写Controller某个方法,在重写的方法体代码里面设置this.before=true。this.clear=true等代码就可以。

关于兼容问题,其实你可以不用考虑兼容问题,jfinal自带的Controller,action,拦截器也是基于jfinal内置某个自带的handler吧。但jfinal自带的Controller是多例的,感觉不太合适,你可以再新建一个内置新的handler来处理,不过这个研发成本,相当于新建一个Controller,Action,Action拦截器体系了
返回顶部
顶部