YMP v2.0.5 发布了。本次版本更新主要是新增若干新特性、增加对Beetl模板引擎的支持,同时针对框架问题修复、移除编译警告及性能优化,并对依赖包升级更新。
YMP是一个非常简单、易用的轻量级Java应用开发框架,涵盖AOP、IoC、WebMVC、ORM、Validation、Plugin、Serv、Cache等特性,让开发工作像搭积木一样轻松是我们一直不懈努力的目标!
新版本已提交至Maven中央库,可以通过以下配置获取各模块依赖:
<dependency> <groupId>net.ymate.platform</groupId> <artifactId>ymate-platform-<MODULE_NAME></artifactId> <version>2.0.5</version> </dependency>
请将替换为具体模块名,模块详见: The Central Repository Search Engine
相关链接:
主要更新内容:
核心(Core)
新增序列化处理器注解支持自动扫描注册
新增IConfigReader接口定义及接口实现
新增IBeanInitializer接口实现自定义Bean实例化后处理逻辑
新增配置项允许@Bean注解自定义对象处理器
新增支持在类路径下通过banner.txt文件自定义字符徽标
新增允许通过JVM启动参数(ymp.run_env)配置系统运行环境并根据环境配置和操作系统类型加载框架配置文件
新增Freemarker模板引擎配置构建工具类
新增RecycleHelper对象资源回收机制
优化框架初始化逻辑
优化调整IInitializable对象初始化能力接口
优化BlurObject在字符串转换为数值异常时将返回默认值并输出异常警告
优化ClassUtils类加载方法防止发生NoClassDefFoundError异常时程序中断
优化Bean注册时是否忽略接口分析逻辑
优化对象序列化接口新增ContentType获取方法
优化密码处理器接口支持设置自定义密钥
优化丰富ClassUtils.BeanWrapper类包装器方法
优化控制台表格构建工具输出样式和换行转义逻辑并支持CSV格式输出
优化@Ignored注解支持在包上声明
优化FileUtils文件工具类增加文件压缩和复制方法
优化并修正接口方法名称拼写错误
配置体系(Configuration)
新增@Configurable注解通过配合IConfigurable接口实现配置文件自动装配
新增配置对象支持是否开启自动重新加载
新增配置文件状态检查机制使修改配置文件内容无需重启服务将自动生效
新增允许通过JVM启动参数(config_home)进行体系目录配置
优化调整IConfiguration使其继承IConfigReader接口
优化配置代理逻辑及配置文件分析器接口方法
日志(Log)
优化并新增(Logoo)怀旧版业务日志记录工具
优化日志输出级别判断
Web框架 (WebMVC)
新增BeetlView视图对Beetl模板引擎支持
新增控制器方法返回结果对象支持自定义输出
优化视图接口方法支持批量添加属性参数
优化控制器方法返回值是String和IView之外的对象并且未指定@ResponseBody注解时框架将默认采用JSON输出
优化UploadFileWrapper文件上传对象包装器对文件移动和复制操作处理逻辑
持久化(JDBC)
优化日志输出SQL参数内容时若字符串中包含换行符则采用Base64编码方式输出
优化堆栈跟踪支持多包名过滤
优化DBCP数据源初始化逻辑
优化JDBC方言以兼容SQLite、PostgreSQL等数据库
优化密码参数值解密处理逻辑
优化实体生成器模板引擎配置方式
持久化(Redis)
优化完善数据源初始化逻辑
优化模块接口方法
优化会话连接开启及关闭处理逻辑
优化完善消息发布订阅逻辑
优化密码参数值解密处理逻辑
新增模块文档
插件(Plugin)
优化插件支持通过依赖注入引用插件实例
服务 (Serv)
修正客户端线程池参数初始化错误
缓存 (Cache)
新增针对Redis缓存禁用元素过期事件订阅配置项
新增针对Redis缓存是否采用SET进行数据存储开关配置
优化重命名缓存包装类名称拼写错误
优化获取对象序列化接口配置逻辑
优化基于Redis缓存及对象过期事件处理逻辑
One More Thing
YMP是一个非常简单、易用的轻量级Java应用开发框架,涵盖AOP、IoC、WebMVC、ORM、Validation、Plugin、Serv、Cache等特性,让开发工作像搭积木一样轻松是我们一直不懈努力的目标!
YMP不仅提供便捷的Web及其它Java项目的快速开发体验,也将不断提供更多丰富的项目实践经验。
了解更多有关YMP框架的内容,请访问官网:http://www.ymate.net/
引用来自“yong9981”的评论
问个问题再找个缺点:1.这个包中IOC工具是否可以整个用Spring替换掉?如果不行,则不能称为模块式架构,因为各个模块都对IOC模块有强依赖了。
2.持久层这块太弱了,一直在强调用一种专有的Java语法代替SQL,个人认为这是个典型的反模式,破坏了SQL的可读性、可移植性,只能写一些非常简单的SQL。建议引入模板模式(仿造BeetlSQL),或写成类似如下没有发明SQL新语法的方式:
List<User> list2 = ctx.iQuery(new EntityListHandler(User.class, “u”),//
"select "//
, (ALIAS) u::getId//
, (C_ALIAS) u::getAddress //
, (C_ALIAS) u::getName //
, " from ", table(u), " where "//
, (COL) u::getName, ">=?", param("Sam") //
, " and ", (COL) u::getAge, ">?", param(10) //
);
或是简单地将持久层这块换成第三方更优秀的持久层。
首先,先回答你的两个问题:
1. YMP框架IoC等核心功能从设计之初就没打算使用Spring来替换,但是将Spring与YMP集成在一起使用是可行的,如果因为没有使用Spring就不能称为模块式是不是有些牵强。
2. 持久化JDBC模块本身定位是针对JDBC API的轻量封装,现在是未来也是,在不破坏JDBC本身使用习惯的前提下做一些能提高效率的扩展,模块提供的对象查询并不是新“发明”类似像HQL这样的新语法,我觉得应该叫它语法糖,每个人的习惯不同,框架中并未强制必须使用,目前框架的编译级别为1.6不支持Lambda表达式这样的新特性,将在未来的版本中不断完善,因为它确实应该更好用才对。
其次,YMP框架不排斥任何第三方优秀的框架,Beetl模板引擎就非常不错,所以本次更新已集成,未来也会集成更多好的、优秀的第三方框架在其中。
1.这个包中IOC工具是否可以整个用Spring替换掉?如果不行,则不能称为模块式架构,因为各个模块都对IOC模块有强依赖了。
2.持久层这块太弱了,一直在强调用一种专有的Java语法代替SQL,个人认为这是个典型的反模式,破坏了SQL的可读性、可移植性,只能写一些非常简单的SQL。建议引入模板模式(仿造BeetlSQL),或写成类似如下没有发明SQL新语法的方式:
List<User> list2 = ctx.iQuery(new EntityListHandler(User.class, “u”),//
"select "//
, (ALIAS) u::getId//
, (C_ALIAS) u::getAddress //
, (C_ALIAS) u::getName //
, " from ", table(u), " where "//
, (COL) u::getName, ">=?", param("Sam") //
, " and ", (COL) u::getAge, ">?", param(10) //
);
或是简单地将持久层这块换成第三方更优秀的持久层。