jfinal 4.9.03 changelog 1:Routes 添加路由扫描配置,通过 Routes.scan(basePackage) 扫描路由 2:添加 Path 注解以及 PathScanner 实现路由扫描功能 3:controllerKey 改为 controllerPath,多个 Controller 可共享同一个 controllerPath 4:Invocation 中的 getControllerKey() 改名为 getControllerPath(),原方法保留并 @Deprecated ------------------------------------------------------------------------------- jfinal 4.9.02 changelog(包含 4.9.01) 1:enjoy 支持中文变量名、中文方法名、中文模板函数名,开启配置 Engine.setChineseExpression(boolean enable) 2:#number 指令舍入规则由默认银行家舍入法改为四舍五入法 3:Engine 添加 setRoundingMode(...) 用于配置 #number 指令、Arith 的舍入规则,默认为四舍五入 4:#date 指令支持 LocalDateTime、LocalDate、LocalTime 5:ActionReporter 支持定制,添加配置方法 Constants.setActionReporter(...) 6:改进 JFinalJson,支持可重入转换 7:Prop 的 get(String)、get(String, String) 方法对返回值添加 trim() 操作 8:Enjoy 的 Compressor 改进算法,提升压缩率,压缩 sql 模板格式更美观,sql 压缩配置方法: activeRecordPlugin.getEngine().setCompressorOn(' '); 9:改进 RedirectRender 在 nginx 反向代理时的支持,redirect(...) 保持住 https 10:Writer 实现 AutoCloseable 接口,支持 try with resources 语法 11:Template 对于 Writer 的使用改为 try with resources 语法 12:新增 TimeKit 用于简化 JDK 8 新增的时间 API 13:Converters、DateKit、Validator、Jackson 中的 SimpleDateFormat 改为使用 TimeKit 14:Kv、Okv 添加 keep(String...) 15:CPI 添加 getAction(Controller),可获取 Controller 内部的 Action 属性,提升扩展性 16:enjoy 模板引擎 buffer 支持 reentrant,添加 reentrantBufferSize 配置 17:Redis 的 Cache 添加订阅、发布 API(感谢 jfinal 俱乐部 @杜福忠 贡献代码) 18:添加 Constants.setToJavaAwtHeadless() 配置。在缺少显示设备、键盘或鼠标时 Graphics、Font、Color、ImageIO 等等 API 仍然能够使用 19:WriterBuffer.bufferSize 默认值由 2048 改为 1024,Engine.setWriterBufferSize(int) 更名为 setBufferSize(int) 20:#random 指令中的 Random 改为使用 ThreadLocalRandom 21:HashKit 中的 Random 改为使用 ThreadLocalRandom 22:Model.find(Config, Connection, String, Object...) 改为 protected 23:PropKit、Prop 添加 getDouble 方法 24:NowDirective 指令中 IOException 改为 Exception,在非 IO 异常时输出模板文件与行号 25:Injector.injectBean(...) 异常信息添加 paraName 26:Controller.createToken(...) 添加返回值 27:MethodKit.addExtensionMethod 支持扩展方法的第一个参数为父类 28:Encoder 由抽象类改为接口 29:Render 实现类添加 OutputStream 与 Writer 的 flush() 操作,提升对客户端的响应速度 30:将 ActionHandler 中对 Controller 的依赖注入挪至 ControllerFactory,便于用户扩展时控制注入 31:JFinalJson 添加 setModelAndRecordFieldNameToCamelCase(boolean toLowerCaseAnyway) 32:Enjoy 的 Unary 添加对 short、byte、BigInteger 的支持 33:RangeArray 消除除法操作 34:Db、DbPro、DbTemplate 添加 queryBigInteger(...) 35:Druid 添加三个配置:defaultTransactionIsolation、validationQueryTimeout、keepAlive 36:JFinalConfig 添加 useFirstFound(...) 37:Fastjson 配置为 setSafeMode 禁用 autoType,添加 addSerializer、setSafeMode 方法 38:输出指令与 #escape 指令去除 Short 类型判断分支 39:FieldKeybuilder 的 classHash 改为 int ------------------------------------------------------------------------------- jfinal 4.9 changelog 1:优化、重构 JFinalJson 模块,性能提升至 jackson 的 3 倍,增强扩展性,并增加了更多功能性配置 2:enjoy 添加 html 压缩功能,配置方法 engine.setCompressorOn(); 3:Engine 添加 addEnum(...),便于支持枚举类型在模板中的使用 4:enjoy 的 Ctrl 添加一个 Object attachment 对象及其 getter、setter 方法,便于穿透 Scope 传递变量 5:Scope 添加 getSharedObject 方法 6:优化 StrKit.toCamelCase(...),并添加一个带有 boolean toLowerCaseAnyway 参数的方法,便于支持本来就是驼峰格式的场景 7:优化 StrKit.isBlank(...) 性能 8:enjoy 的 Arith 针对 BigDecimal.divide(...) 添加 scale、rounding mode 两个配置。默认值分别为:5、四舍五入 9:Lexer 在字符 # 与关键字指令相继出现时,不再要求一定解析出指令,便于支持 $("#if").method() 这类 jquery 用法 10:enjoy 的 Arith 与 Compare 表达式添加对 BigInteger 的支持 11:enjoy 的 Template 添加四个携带 Func 接口的 render 方法,支持更深度的扩展 12:Engine 添加 setCacheStringTemplate(boolean) 用于控制是否缓存通过 getTemplateByString(String) 获取的模板 13:EngineConfig 添加 setWriterBuffer,便于用户自己扩展 WriterBuffer 14:添加 CORSInterceptor、EnableCORS,支持跨域资源共享(jpress、jboot 作者 @海哥 贡献) 15:FileRender 添加 boolean normalRenderOnly,用于强制客户端只能单线程下载,减轻服务器带宽压力 16:Db 添加两个 txInNewThread 方法,支持在新线程开启事务 17:Db.queryBigDecimal(...) 支持 String 类型 18:Model、Record 的 getBigDecimal 支持 String 类型 19:TableMapping.putTable(...) 不再检测重复 key 值,用于支持动态更新 model 映射 20:TableBuilder 改为 public 可见性,便于用户利用其动态更新 model 映射 21:DruidPlugin 添加 setDefaultTransactionIsolation 配置,所有属性改为 protected 22:Model、DbPro 中开启的 PrepareStatement 在 调用在 try-with-resources 中保障被 close() 掉 23:Db 带有 List type, Object singletonObject),支持指定类型的映射 38:Enjoy 模板引擎添加 NullMethodInfo,简化代码提升性能 39:Enjoy 模板引擎 Scope 中的 getGlobal、setGlobal、removeGlobal 支持顶层 data 为 null 40:Enjoy 模板引擎 #set 系列指令放开对于自增、自减表达式的使用限制 41:JFinalFilter 所有属性改为 protected ,便于继承扩展 ------------------------------------------------------------------------------- jfinal 4.2 changelog: (包含 4.0、4.1) 1:新增 proxy 模块,enjoy、class loader、dynamic compile 美妙结合, 以 613 行代码消除对 cglib-nodep (19505 行代码)的第三方依赖 2:删掉 cglib-nodep 依赖,使得 jfinal 告别第三方依赖 3:Enhancer、Duang 中对 cglib 的依赖改为使用 proxy 4:删除 @Enhance 注解,新增的 proxy 模块会根据拦截器存在与否自动决定是否 enhance, 使用 @Clear 清除拦截器便可消解掉 @Enhance 5:去掉 aop 模块有关 enhance 配置的代码,已被 proxy 消解 6:Model、Db 添加 template 模板查询 API,使得用户相关代码量再减少 50%,进一步提升开发体验 7:添加 DaoTemplate、DbTemplate,用于实现模板查询 8:Validator 添加 setRet(...)、getRet() 便于接管验证结果,方便业务层返回值与 Validator 返回值统一 成 Ret,进而便于前端 js 统一处理逻辑 9:改进 ActionHandler,异常输出增加 action 签名,方便更快定位 10:添加 Reflect.getMethodSignature(...) 11:Controller 中的 getDate/getParaToDate 改为使用 TypeConverter,支持更广泛的 date pattern 12:增强 Converters,支持 HTML 5 的 date time 组件,格式为:2019-01-23T11:22 13:configInterceptor 回调次序调整到 configRoute 之前,支持 configRoute 中的 routes 级拦截器被注入的对象应用全局拦截器 14:Enjoy 的 field 表达式,调整 RealFieldGetter 优先级高于 ModelFieldGetter, 支持 field 表达式获取 Model 中的 public 属性,便于代替 static field 用法节省代码量 15:enjoy 模块三处代码改为 try with resource 风格,老风格是为了老版本兼容 JDK 1.6 16:TextRender 判断 contentType 是否包含 "charset" 来决定是否 setEncoding 避免 setEncoding 覆盖掉 contentType 中的 "charset" 17:删除 Ret、Kv 中早已被 @Deprecated 的代码 18:删除早已被 @Deprecated 过的 JMap,早已被 Kv 完全取代 19:删除早已被 @Deprecated 的 Sqls,早已被 sql 模板完全取代 20:jetty-server 升级到 2019.3 21:新增 ProxyFactory 扩展 CglibProxyFactory ------------------------------------------------------------------------------- jfinal 3.8 changelog: 1:AopFactory 修复子类没有属性时,超类无法被注入的问题 2:Aop 中的有关配置的 API 转移至 AopManager 3:Constants 中添加 setInjectSuperClass(boolean) 配置是否对超类进行注入 4:Validator 添加注入功能 5:Cron4jPlugin 添加 getTaskInfoList(),便于扩展 6:Callback 优化性能,并去除 injectTarget 机制 7:Invocation 中去除 useInjectTarget ------------------------------------------------------------------------------- jfinal 3.7 changelog: 1:增强 Aop 模块,支持任意层次数的注入,完美支持循环依赖 2:Aop 支持对超类进行注入,需要配置 Aop.setInjectSuperClass(true),默认不开启 3:PropKit 添加 useFirstFound(String... fileNames) 方法,支持配置文件优先加载策略 具体用法参考 jfinal_demo_for_maven,可在官网首页右侧下载 4:去除 AopFactory 中的 injectDepth 检测机制,已更好支持循环依赖注入 5:ControllerFactory 添加 recycle(Controller) 方法,方便用户自定义 controller 回收策略 6:增强 MetaBuilder,解决 Oracle 驱动 bug:生成重复主键 7:增强 DataDictionaryGenerator,解决 Oracle 驱动 bug:生成字典文件时报异常 8:Enjoy 的 FieldKit、MethodKit 添加 clearCache() 方法,便于扩展 9:Engine 添加 setEncoderFactory(...) 方法,方便定制 Encoder 10:#include 指令模板参数为变量时,提示使用 #render 指令,提升开发体验 11:ClassPathSource 找不到文件时的异常提示信息如果发生在 class path、jar 包中, 提示信息中添加 "in CLASSPATH or JAR" 文本,定位错误到 class path 与 jar 包而非文件系统目录加快排错效率 ------------------------------------------------------------------------------- jfinal 3.6 changelog: 1:enjoy 引擎添加 #switch、#case、#default 指令,与 java 12 的 switch 新特性保持一致,既减少了代码量,又增强了功能 2:enjoy 引擎添加 #call 指令,支持调用模板函数时,函数名与函数参数动态化,进一步提升 enjoy 引擎的灵活性 3:Generator、MetaBuilder 添加生成 remarks 备注功能,需要配置:gen.setGenerateRemarks(true) 4:Controller 添加 set(String name, Object value),可替代 setAttr(...) 进一步节省代码量 5:Controller 添加 get(...) 系方法,可替代 getPara(...) 系方法,可进一步节省大量代码 6:Controller 添加 getInt(...)、getLong(...) 等系方法,可替代 getParaToInt(...) 等系方法,进一步节省代码量 7:增强 Tx 事务拦截器,在 Controller 中使用 try catch 时,可以在 catch 块中使用 render 8:Kv、Okv、Ret 添加 setIfNotBlank(...),使得 if(StrKit.notBlank(v)) kv.set(k, v) 可以改写为 kv.setIfNotBlan(k, v),进一步减少代码量。 还添加了 setIfNotNull(...) 原因同上 9:Db、DbPro 添加 getSqlParaByString(...) 方法,便于从 String 变量的模板中获取 SqlPara 对象, 在 String 变量中使用 enjoy 引擎管理 sql 的生成远远优于使用字符串拼接方式 10:Model、Db、DbPro 添加 findAll() 方便获取类似于字典 table 这样的小表数据 11:EvictInterceptor 支持多 cacheName,用逗号分隔即可:@CacheName("a", "b") 12:JFinalFilter 添加对 onStart()、onStop() 回调,并针对 jfinal undertow 优化异常提示信息 13:ErrorRender 中的 String 型数据改为 byte[] 型数据,提性能。去除 flush(),避免 undertow 之下客户端 主动断开连接时的 IO 异常 14:去掉 Render 子类中的 flush() 调用,避免 undertow 之下客户端主动中断连接时的 IO 异常,减少日志输出量 15:Routes 添加 setMappingSuperClass(boolean) 配置控制器超类中的 public 方法是否被映射为 action, 默认值为 false 16:Model、Db、DbPro 中的针对多主键(联合主键) 的 findById(...) 方法更名为 findByIds(...), deleteById(...) 更名为 deleteByIds(...) 解决 JDK 8 之下的参数类型转换异常问题 17:ActionMapping 针对 Routes.setMappingSuperClass(...) 优化映射性能,大型项目启动速度提升 200 毫秒左右 18:Model 添加 setOrPut(...) 方法,可自动判断数据是否属于数据表中的字段,如果是则添加修改标记,方便支持 update() 19:JFinalConfig 添加 onStart()、onStop() 取代 afterJFinalStart()、beforeJFinalStop(), 在减少代码输入量的同时,降低输入手误的概率。原方法被 @Deprecated 但仍然可用,方便升级兼容 20:Sql 管理模块使用的 Engine 对象添加配置:engine.setToClassPathSourceFactory(),默认将从 class path 与 jar 包中加载 sql 文件 21:改进 MethodKit、FieldGetter 放开对 getMethod()、getField() 等方法的调用 22:NestedTransactionHelpException、ValidateException 添加 fillInStackTrace() 优化性能。 消除抛异常时 Throwable.fillInStackTrace() 的耗时动作,这两个异常中的 stack 信息不会被使用, 所以没必要在 fillInStackTrace() 中进行任何操作 23:Aop、AopFactory 添加 get(Class targetClass, int injectDepth),支持指定注入深度 24:优化 AopFactory,消除为 Controller 多级注入时多余的动作,进一步减少代码量 25:Db、DbPro 添加 paginate(int, int, boolean isGroupBySql, SqlPara sqlPara),在支持 SqlPara 参数的同时还支持 boolean isGroupBySql 参数 26:Routes 添加 getRoutesList()、getControllerKeySet() 便于深度扩展,例如扩展可插拔路由功能 27:Dialect、MysqlDialect、PostgreSqlDialect 添加 forFindAll(...) 28:DataGetter 改为通过 Converter.convert(v) 进行类型转换,兼容更多 pattern 格式的日期型数据 29:com.jfinal.core.paragetter 包下所有抛出 ActionException 异常的状态码由 404 改为 400,与 controller 中保持一致 30:ParaProcesorBuilder 警告信息添加类名与方法名,便于开发过程中快速定位问题地点 31:Record 添加 getObject(...) 方法 32:Page 添加所有属性的 setter 方法,便于 fastjson 这类第三方反序列化 33:com.jfinal.plugin.activerecord.CPI 添加 getConfig(...)、getTable(...)、getUsefulClass(...), 便于扩展 active record 功能 34:DruidPlugin 的 initialSize 默认值改为 1 加快启动速度。maxActive 默认值改为 32 节省 Connection 资源 35:KeepByteAndShortModelBuilder、KeepByteAndShortRecordBuilder 避免 JDBC 将 Short、Byte 类型字段的 null 值转换为 0 36:Prop 添加 public 无参构造方法,并为属性赋予默认值,便于扩展 37:Redis.call(...) 返回值由 Object 改为泛型 T 38:jetty-server 从 2018.11 升到 2019.1