网站首页 > 博客文章 正文
不同JavaBean之间的拷贝随着服务分层的发展用得越来越多. 而不同服务层都有自己服务层独有的bean, 例如DTO, BO, DO等等.
这些Bean中的元素大多数都是相同的,但是由于各种原因里面的属性名称可能会有细微差别.
比如 cno 与 customNo 等价, password和pwd等价, 等等.
通常我们会使用String的BeanUtils来转换这些对象. 而这些不同属性名的属性会通过其他手段进行复制值.比如dozer等现有的成熟框架.
而今天介绍的是一个超轻量级的属性映射工具sprouts-bean-mapper, 它解决了bean中不同属性名称映射的问题. 通过sprouts-bean-mapper的处理后,可以直接使用String的BeanUtils来复制对象,不同属性名的属性赋值不用再单独处理.
使用方式
(1)添加Maven引用
<dependency>
<groupId>com.github.gs618</groupId>
<artifactId>sprouts-bean-mapper</artifactId>
<version>1.0.1</version>
<scope>provided</scope>
</dependency>
(2)在目标bean的属性上添加@BeanMapper注解, 下面我们要复制ObjectB到ObjectC
public class ObjectC {
@BeanMapper(targets = {"objectA"})
private ObjectA objA;
@BeanMapper(targets = {"stringField", "str"})
private String strField;
@BeanMapper(targets = {"intField"})
private int iField;
}
public class ObjectB {
private ObjectA objectA;
private String stringField;
private int intField;
private long longField;
}
/**
* Object A 只标志了一个类, 代表复杂类型
*/
public class ObjectA {
private String stringField;
}
(3)使用Spring的BeanUtils复制对象即可
public static void main(String[] args) {
ObjectA objectA = new ObjectA("Hello ObjectA");
System.out.println(objectA.toString());
ObjectB objectB = new ObjectB(objectA, "StringInB", 100, 1000L);
System.out.println(objectB.toString());
ObjectC objectC = new ObjectC();
System.out.println(objectC.toString());
BeanUtils.copyProperties(objectB, objectC);
System.out.println(objectC.toString());
}
(4)结果如下
ObjectA(stringField=Hello ObjectA)
ObjectB(objectA=ObjectA(stringField=Hello ObjectA), stringField=StringInB, intField=100, longField=1000)
ObjectC(objA=null, strField=null, iField=0)
ObjectC(objA=ObjectA(stringField=Hello ObjectA), strField=StringInB, iField=100)
(5)Sample请参考下面链接
https://github.com/gs618/sprouts-bean-mapper-sample
sprouts-bean-mapper 能做什么
sprouts-bean-mapper只是一个简单的项目.所以它的所有功能就只是做不同属性名称的映射, 所以还是需要配合spring的BeanUtils进行复制对象.
注意事项
(1) 单向映射, 如果需要双向映射, 需要两个类之间使用注解相互标注
(2) 无法分辨多个重复的目标, 即同一个类中, 不同的属性都指向同一个源时, 编译器会报错(这个是因为实现原理的原因)
(3) 强入侵, class文件将被修改
代码地址
https://github.com/gs618/sprouts-bean-mapper
- 上一篇: Java常用的几种属性拷贝工具类使用总结
- 下一篇: JAVA 对象的创建与克隆
猜你喜欢
- 2024-12-03 一个基于spring boot的Java开源商城系统
- 2024-12-03 8种开发工具,拒绝加班熬夜
- 2024-12-03 细思极恐:你真的会写Java吗?
- 2024-12-03 这17个小工具,让我的开发效率提升了50%
- 2024-12-03 面试官问:什么是浅拷贝和深拷贝?
- 2024-12-03 Springboot2.6升级到3.2
- 2024-12-03 平常写代码时,用到的常用工具类
- 2024-12-03 再见 BeanUtils,对比 12 种 Bean 自动映射工具,就它性能最拉跨
- 2024-12-03 如何写好业务代码
- 2024-12-03 BeanUtils.copyProperties:曾经是我的女神,现在是我的毒药。
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)