MapStructPlus 1.4.0 版本发布,体积更轻量!性能更强!
MapStruct Plus 是 MapStruct 的增强工具,在 Mapstruct 的基础上,实现了自动生成 Mapper 接口的功能,并强化了部分功能,使 Java 类型转换更加便捷、优雅。
此次迎来了一次较大版本的更新,更新日志如下:
-
优化复杂对象转换逻辑,占用元空间更小!性能更快!
此版本针对于复杂对象的自动转换逻辑,进行了优化和部分的重新设计,减少了一些不必要的转换方法,占用元空间更小。
以 RuoYi-Vue-Plus 为例,使用新版本后,元空间占用减少了 7MB,根据项目的复杂程度不同,减少的内存占用也有所不同。
且根据 issue#67 中提到,在 SpringBoot + Aop 场景下,性能会受影响, 在新版本中,修改了实现方式,性能比提升一半以上。
-
去除 hutool 等依赖,目前项目中只依赖了 MapStruct
从 1.4.0 版本之后,去除了 MapStruct 之外的依赖,打包后体积更小。
但当需要使用 Map
与对象转换时,需要额外引入 hutool-core
依赖包。
-
适配对象循环嵌套场景
类循环嵌套是指两个类互相引用,例如,源对象和目标对象结构都包含父对象和子对象之间的双向关联。 当存在这种情况时,直接进行转换时,会导致栈溢出的问题(stack overflow error)。
示例:
@Data public class TreeNode { private TreeNode parent; private List<TreeNode> children; } @Data public class TreeNodeDto { private TreeNodeDto parent; private List<TreeNodeDto> children; }
parent
属性可以是其他类型的,可能跨越一个更长的属性链形成的嵌套循环。
为了适配这种情况,MapStructPlus 的 AutoMapper
注解中增加了 cycleAvoiding
属性,该属性用于标识,是否需要避免循环嵌套的问题。 默认为 false
,如果需要避免循环嵌套,需要将该属性设置为 true
。
当配置为 true
时,在整个对象的转换过程链路中,会传递一个 CycleAvoidingMappingContext
对象,临时保存转换生成的对象, 在转换链路中,如果发现需要生成的对象已经存在,会直接返回该类型,从而避免栈溢出问题。
以上面的示例为例,在 AutoMapper
注解中,配置 cycleAvoiding
属性为 true
,如下所示:
@Data @AutoMapper(target = TreeNodeDto.class, cycleAvoiding = true) public class TreeNode { private TreeNode parent; private List<TreeNode> children; } @Data @AutoMapper(target = TreeNode.class, cycleAvoiding = true) public class TreeNodeDto { private TreeNodeDto parent; private List<TreeNodeDto> children; }
编译生成的转换逻辑如下:
public TreeNodeDto convert(TreeNode arg0, CycleAvoidingMappingContext arg1) { TreeNodeDto target = arg1.getMappedInstance(arg0, TreeNodeDto.class); if (target != null) { return target; } if (arg0 == null) { return null; } TreeNodeDto treeNodeDto = new TreeNodeDto(); arg1.storeMappedInstance(arg0, treeNodeDto); treeNodeDto.setParent(demoConvertMapperAdapterForCycleAvoiding.iglm_TreeNodeToTreeNodeDto(arg0.getParent(), arg1)); treeNodeDto.setChildren( demoConvertMapperAdapterForCycleAvoiding.iglm_TreeNodeToTreeNodeDto(arg0.getChildren(), arg1)); return treeNodeDto; }
-
AutoMapping
、ReverseAutoMapping
支持qualifiedByName
、conditionQualifiedByName
和dependsOn
属性 -
AutoMappings
支持配置在方法上面
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
无鱼 v1.3.0 已经发布,项目工时系统
无鱼 v1.3.0 已经发布,项目工时系统 此版本更新内容包括: 无鱼工时系统标准版1.3.0 发布了 一, 更新内容: 1、#I954Q6 新增了项目月报的自定义统计范围 可查看按自定义时间统计项目的工时统计和相关人员详情。 2、修复用户填报历史无法访问的问题 3、一些其他bug。 #I93WF7 二,效果预览 三,下载使用 下载地址: 下载 查看部署手册: 部署 详情查看:https://gitee.com/wy-soft/wyproject/releases/v1.3.0
- 下一篇
Ant Design 5.15.3 发布,企业级 UI 设计语言和 React 实现
An Design 5.15.3 现已发布,主要变化如下: 统一 Modal、Drawer、notification 和 Tour 关闭按钮的样式,并增大 Modal 和 Drawer 关闭按钮的交互区域使其更容易点击。#47909 修复 Badge 和文本元素在 Space 下排版不对齐的问题。#47908 修复 Upload 列表行动点换行的问题。#47898 修复 Typography 配置的ellipsis.symbol超出单行高度时,省略行数不正确的问题。#47889 修复 DatePicker 配置自定义controlHeight时展示高度不正确的问题。#47874 修复 DatePicker 设置multiple多选换行时行与行之间没有间隙的问题。#47821 调深 Empty 文本色彩使其更清晰可读一些。#47268 更新说明:https://github.com/ant-design/ant-design/releases/tag/5.15.3
相关文章
文章评论
共有0条评论来说两句吧...