自YMP v2.0GA版本发布至今,在经历近一年时间不断的优化完善,今天,正式发布YMP v2.0.0版!
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.0</version>
</dependency> 请将<MODULE_NAME>替换为具体模块名,模块详见: The Central Repository Search Engine
更新记录:核心 (Core) 优化框架初始化逻辑, 优先加载ymp-conf_DEV.properties配置文件并强制设置ymp.dev_mode=true; 优化ClassUtils类的duplicate方法, 当首次赋值发生异常时, 若成员变量值不为null则尝试再次类型转换; 优化@ContextParam注解的参数处理逻辑使其value属性可以通过$xxx的格式支持从框架全局参数中获取值; 优化ExpressionUtils表达式工具类为其增加获取变量名称集合和清理变量占位符方法; 优化Event默认事件管理提供者接口实现; 优化代理并增加@CleanProxy注解可用于清理不必要的代理绑定; 优化拦截器逻辑, 非公有方法和Object类方法将不被拦截处理, 同时也可以通过声明@Ignored注解使类方法忽略一切拦截器配置; 优化BlurObject类型转换逻辑并修正转换BigDecimal和BigInteger类型时可能产生空指针异常的问题; 优化RuntimeUtils运行时工具类获取应用根路径方法, 防止产生空指针异常情况; 优化CodecUtils类并新增PBE和RSA对称加密类方法; 新增ymp.excluded_files包文件排除列表配置项, 用于在框架自动扫描过程中排除指定的JAR包或ZIP文件等; 新增PropertyStateSupport类配合@PropertyState注解记录成员属性值变化并允许复制任意相同属性的值(支持空值过滤); 修正II18NEventHandler未设置时加载资源会出现空指针异常; 修正I18N本地线程未清理导致数据混乱的问题;
配置体系 (Configuration) 持久化 (JDBC) 完善JDBC存储过程操作器接口IProcedureOperator及其默认实现类DefaultProcedureOperator的操作逻辑并支持泛型; 优化操作器异常日志输出, 防止发生异常丢失的情况; 优化ResultSetHelper类为其增加直接获取结果集中第一个元素的包装对象方法; 优化MySQLDialect方言为其增加支持通过实体生成数据表结构的新特性; 优化数据源适配器,在销毁数据源时将驱动的解注册代码移至抽象类中, 避免其它数据源出现JDBC内存泄漏的警告; 优化日志输出和潜在的连接池泄漏隐患; 优化分页参数若pageSize=0则返回DEFAULT_PAGE_SIZE常量值; 优化实体生成器的复合主键处理逻辑并添加表结构日志输出; 优化实体生成器配置增加类成员属性值状态变化注解开关并更新模板; 优化实体生成器并添加了REMARKS字段属性的读取但未在模板中输出; 优化实体生成器的数据表名称排除列表参数添加"*"通配符支持; 为实体生成器增加视图支持(视图通过实体声明@Readonly只读, 视图仅支持查询操作); 为生成视图实体对象的id属性做兼容处理; 当数据表字段(非主键)名称为id时将生成set_Id/get_Id方法与实体接口方法setId/getId区分开, 主要为适应老旧的数据表结构, 应尽量避免使用id做为非主键字段名称; 新增方法可以根据逻辑表达式运算结果决定是否采纳Cond条件; 新增BeanResultSetHandler结果集处理接口实现类用于将数据直接映射到类成员属性; 新增@ShardingRule注解和IShardingable接口实现分库分表的能力, 后续完善常用的拆分规则; 新增BaseEntity对象分库分表的支持以及通过实体创建或删除数据表相关方法; 新增通过@Repository注解执行自定义或读取配置文件中指定的SQL语句并支持自定义参数占位符${xxxx}的形式的新特性; 优化Fields对排除标识的处理并让Cond更友好的处理字段前缀拼接; 优化Cond条件对象增加用于生成条件辅助表达式1=1的方法; 优化Select语句对象并增加Page分页属性及方法; 修正Where条件中的GroupBy子句被忽略的问题; 修正数据实体赋值时找不到实体属性配置而产生的空指针异常问题, 仅当对SQLServer数据库分页查询时会出现此类问题; 修正实体生成器对无符号数值类型的判断; 修正实体生成器对字段是否可为空的判断; 修正部份重载方法的分页参数传递问题; 修正误引入JDK1.7中才有的接口类导致在1.6下编译错误, 目前已成功在JDK1.6.0_43下编译通过;
Web框架 (WebMVC) 优化控制器参数注解使其支持从其它作用域下尝试获取参数值; 优化控制器获取请求参数方法逻辑使其先执行拦截器然后再执行参数验证; 优化控制器请求参数及请求头配置'name=*'的判断逻辑; 优化控制器日志中增加线程名称和执行消耗时间的输出; 优化文件上传相关逻辑, 新增IMultipartRequestWrapper接口以便支持单元测试框架很好的完成模拟测试; 优化缓存元素的过期时间处理逻辑并完善对@ResponseCache注解处理过程, 提供IWebCacheProcessor接口默认实现以支持对视图执行结果缓存处理; 完善IWebCacheProcessor接口默认实现类对scope参数的处理; 完善@ResponseCache缓存处理逻辑使其对Scope.DEFAULT支持Last-Modified等浏览器相关配置及GZIP压缩等特性; 优化@ResponseCache缓存Key生成逻辑, 使其支持I18N区别不同的语言; 优化@ResponseCache缓存处理逻辑; 优化视图对象并调整更多视图对@ResponseCache的支持; 优化二进制流视图对内容长度ContentLength的计算逻辑; 优化CookieHelper增加是否使用URLEncoder/URLDecoder编码的开关方法allowUseURLCoder; 修正控制器方法由于未进行参数转义开关的判断导致可能出现的空指针异常; 修正控制器请求参数默认值未处理的问题; 修正HttpServletRequest对象添加属性时的线程安全问题; 修正请求参数代理仅处理控制器中声明@RequestMapping的方法; 增加parameter_escape_order配置项, 用于控制请求参数转义的执行顺序, 支持参数验证之前(before)或之后(after); 增加default_enabled_cookie_auth配置项, 用于控制Cookie密钥验证是否默认开启;
验证 (Validation) 优化验证框架在特定情况下无法正确获取属性参数值的问题; 优化@VField注解处理逻辑, 解决类方法参数名称相同时的冲突问题; 允许@VField注解的name和label参数支持I18N取值; 调整@VLength验证器支持数组类型参数的长度验证; 通过@VLength验证器的min与max参数相等来验证字符串或数组是否等于指定长度; 允许验证器读取@ContextParam上下文配置参数; 允许验证器注解自定义I18N资源文件名称;
缓存 (Cache) 优化ICacheProvider接口实现类获取缓存对象的方法逻辑, 调整为当由参数name指定的缓存对象不存在时创建它; 为Multilevel模式增加可选扩展参数, 用于配置是否自动同步Master和Slave级缓存; 修正并明确缓存时间单位为秒;
日志 (Log) 优化日志输出请求参数和回应状态值; 优化日志输出类名不完整的问题; 优化并调整日志级别的判断逻辑; 优化日志内容输出逻辑和获取日志记录器方式; 调整默认配置使其按小时输出日志; 调整日志记录方式及事件参数; 添加SimpleLogger配置样例; 添加SimpleLog配置样例;
服务 (Serv) 修正可能产生空指针异常的情况; 修正读取服务端配置问题;
插件 (Plugin) 2017年,是YMP的第一个10年,时至今日,她已经在约车服务、P2P金融、保险、国内贸易船运物流、车辆位置服务、新能源服务、在线教育及视频会议、网站、电商平台和微信公众平台二次开发等领域相关项目中得到应用,也正是通过在这些项目上的实践来发现不足并不断的改进和完善。 BTW:YMP不仅提供便捷的Web及其它Java项目的快速开发体验,也将不断提供更多丰富的项目实践经验。
了解更多有关YMP框架的内容,请访问官网:http://www.ymate.net/ |