JAVA中JavaBean对象之间属性拷贝的⽅法
  JAVA中JavaBean对象之间的拷贝通常是⽤get/set⽅法,但如果你有两个属性相同的JavaBean或有⼤部分属性相同的JavaBean,对于这种情况,可以采⽤以下⼏个简便⽅法处理。
下⾯对这⼏个⽅法做⼀下简单介绍,并通过实际的案例测试下性能差异
1.使⽤org.apachemons.pyProperties
2.使⽤org.springframework.pyProperties
3.使⽤lib.py
4.使⽤lib.py
5.使⽤mirror mirror.setValue
6.使⽤⾃写反射
7.使⽤json序列化
⼀. 项⽬依赖
1 <dependencies>
2        <dependency>
3            <groupId>org.springframework</groupId>
4            <artifactId>spring-core</artifactId>
5            <version>5.1.6.RELEASE</version>
6        </dependency>
7        <dependency>
8            <groupId>org.nutz</groupId>
9            <artifactId>nutz</artifactId>
10            <version>1.b.52</version>
11        </dependency>
12        <dependency>
13            <groupId>commons-beanutils</groupId>
14            <artifactId>commons-beanutils</artifactId>
15            <version>1.9.3</version>
16        </dependency>
17        <dependency>
18            <groupId>org.springframework.data</groupId>
19            <artifactId>spring-data-redis</artifactId>
20            <version>2.0.7.RELEASE</version>
21            <exclusions>
22                <exclusion>
23                    <artifactId>spring-core</artifactId>
24                    <groupId>org.springframework</groupId>
25                </exclusion>
26            </exclusions>
27        </dependency>
28        <dependency>
29            <groupId>commons-logging</groupId>
30            <artifactId>commons-logging</artifactId>
31            <version>1.2</version>
32        </dependency>
33        <dependency>
34            <groupId>com.alibaba</groupId>
35            <artifactId>fastjson</artifactId>
36            <version>1.2.51</version>
37        </dependency>
38
39        <dependency>
40            <groupId>cglib</groupId>
41            <artifactId>cglib</artifactId>
42            <version>3.1</version>
43        </dependency>
44        <dependency>
45            <groupId>org.projectlombok</groupId>
46            <artifactId>lombok</artifactId>
47            <version>1.18.6</version>
48        </dependency>
49    </dependencies>
项⽬依赖
⼆. 准备测试类及数据
@Data
public static class CosmosY {
private String filed5;
private String filed6;
private String filed7;
private String filed8;
private String filed9;
private String filed10;
private String filed11;
private String filed12;
private String filed13;
private String filed14;
private String filed15;
private String filed16;
private String filed17;
private String filed18;
private String filed19;
private String filed20;
private String filed21;
private String filed22;
private String filed23;
private String filed24;
private String filed25;
private String filed26;
private String filed27;
private String filed28;
private String filed29;
private String filed30;
private String filed31;
private String filed32;
private String filed33;
private String filed34;
private String filed35;
private String filed36;
private String filed37;
private String filed38;
private String filed39;
private String filed40;
private String filed41;
private String filed42;
private String filed43;
private String filed44;
private String filed45;
private String filed46;
private String filed47;
private String filed48;
private String filed49;
private String filed50;
}
测试类:SourceData
@Data
public static class CosmosN {
private String filed1;
private String filed2;
private String filed3;
private String filed4;
private String filed5;
private String filed6;
private String filed7;
private String filed8;
private String filed9;
private String filed10;
private String filed11;
private String filed12;
private String filed13;
private String filed14;
private String filed15;
private String filed16;
private String filed17;
private String filed18;
private String filed19;
private String filed20;
private String filed21;
private String filed22;
private String filed23;
private String filed24;
private String filed25;
private String filed26;
private String filed31;
private String filed32;
private String filed33;
private String filed34;
private String filed35;
private String filed36;
private String filed37;
private String filed38;
private String filed39;
private String filed40;
private String filed41;
private String filed42;
private String filed43;
private String filed44;
private String filed45;
private String filed46;
private String filed47;
private String filed48;
private String filed49;
private String filed50;
}
测试类:⽬标类
使⽤随机数据,初始化源数据对象
1private static CosmosY getCosmosY() {
2        CosmosY cosmosY = new CosmosY();
3        Field[] fields = Class().getDeclaredFields();
4for (Field field : fields) {
5try {
6                field.setAccessible(true);
7                field.set(cosmosY, getRandomString());
8            } catch (IllegalAccessException e) {
9                e.printStackTrace();
10            }
11        }
12return cosmosY;
13    }
14
15
16/**
17    * 获取随机词
18    *
19    * @return
20*/
21private static String getRandomString() {
22
23        Random random = new Random();
24        List<String> stringList = new ArrayList<String>();
25        stringList.add("application 应⽤程式应⽤、应⽤程序");
26        stringList.add("application framework 应⽤程式框架、应⽤框架应⽤程序框架");
27        stringList.add("architecture 架构、系统架构体系结构");
28        stringList.add("argument 引数(传给函式的值)。叁见 parameter 叁数、实质叁数、实叁、⾃变量");
29        stringList.add("array 阵列数组");
30        stringList.add("arrow operator arrow(箭头)运算⼦箭头操作符");
31        stringList.add("assembly 装配件");
32        stringList.add("assembly language 组合语⾔汇编语⾔");
33        stringList.add("assert(ion) 断⾔");
34        stringList.add("assign 指派、指定、设值、赋值赋值");
35        stringList.add("assignment 指派、指定赋值、分配");
36        stringList.add("assignment operator 指派(赋值)运算⼦ = 赋值操作符");
37        stringList.add("associated 相应的、相关的相关的、关联、相应的");
38        stringList.add("associative container 关联式容器(对应 sequential container)关联式容器");
39        stringList.add("atomic 不可分割的原⼦的");
40        stringList.add("attribute 属性属性、特性");
41        stringList.add("audio ⾳讯⾳频");
42        stringList.add("A.I. ⼈⼯智慧⼈⼯智能");
43        stringList.add("background 背景背景(⽤於图形着⾊)后台(⽤於⾏程)");
44        stringList.add("backward compatible 回溯相容向下兼容");
45        stringList.add("bandwidth 频宽带宽");
46        stringList.add("base class 基础类别基类");
47        stringList.add("base type 基础型别 (等同於 base class)");
48        stringList.add("batch 批次(意思是整批作业)批处理");
49        stringList.add("benefit 利益收益");
50        stringList.add("best viable function 最佳可⾏函式最佳可⾏函式(从 viable functions 中挑出的最佳吻合者)");
51        stringList.add("binary search ⼆分搜寻法⼆分查");
52        stringList.add("binary tree ⼆元树⼆叉树");
53        stringList.add("binary function ⼆元函式双叁函数");
54        stringList.add("binary operator ⼆元运算⼦⼆元操作符");
55        stringList.add("binding 系结绑定");
56        stringList.add("bit 位元位");
57        stringList.add("bit field 位元栏位域");
58        stringList.add("bitmap 位元图位图");
59        stringList.add("bitwise 以 bit 为单元逐⼀┅");
60        stringList.add("bitwise copy 以 bit 为单元进⾏复制;位元逐⼀复制位拷贝");
61        stringList.add("block 区块,区段块、区块、语句块");
62        stringList.add("boolean 布林值(真假值,true 或 false)布尔值");
63        stringList.add("border 边框、框线边框");
64        stringList.add("brace(curly brace) ⼤括弧、⼤括号花括弧、花括号");
65        stringList.add("bracket(square brakcet) 中括弧、中括号⽅括弧、⽅括号");
66        stringList.add("breakpoint 中断点断点");
67        stringList.add("build 建造、构筑、建置(MS ⽤语)");
68        stringList.add("build-in 内建内置");
69        stringList.add("bus 汇流排总线");
70        stringList.add("business 商务,业务业务");
71        stringList.add("buttons 按钮按钮");
72        stringList.add("byte 位元组(由 8 bits 组成)字节");
73        stringList.add("cache 快取⾼速缓存");
74        stringList.add("call 呼叫、叫⽤调⽤");
75        stringList.add("callback 回呼回调");
76        stringList.add("call operator call(函式呼叫)运算⼦调⽤操作符 ># (同 function call operator)");
77        stringList.add("candidate function 候选函式候选函数 ># (在函式多载决议程序中出现的候选函式)");
78        stringList.add("chain 串链(例 chain of function calls)链");
79        stringList.add("character 字元字符");
80        stringList.add("check box 核取⽅块 (i.e. check button) 复选框");
81        stringList.add("checked exception 可控式异常(Java)");
82        stringList.add("check button ⽅钮 (i.e. check box) 复选按钮");
83        stringList.add("child class ⼦类别(或称为derived class, subtype)⼦类");
84        stringList.add("class 类别类");
85        stringList.add("class body 类别本体类体");
86        stringList.add("class declaration 类别宣告、类别宣告式类声明");
87        stringList.add("class definition 类别定义、类别定义式类定义");
88        stringList.add("class derivation list 类别衍化列类继承列表");
89        stringList.add("class head 类别表头类头");
90        stringList.add("class hierarchy 类别继承体系, 类别阶层类层次体系");
91        stringList.add("class library 类别程式库、类别库类库");
92        stringList.add("class template 类别模板、类别范本类模板");
93        stringList.add("class template partial specializations ># 类别模板偏特化类模板部分特化");
94        stringList.add("class template specializations ># 类别模板特化类模板特化");
95        stringList.add("cleanup 清理、善后清理、清除");
96        stringList.add("client 客端、客户端、客户客户");
97        stringList.add("client-server 主从架构客户/服务器");
98        stringList.add("clipboard 剪贴簿剪贴板");
99        stringList.add("clone 复制克隆");
100        stringList.add("collection 集集合");
101        stringList.add("combo box 复合⽅块、复合框组合框");
102        stringList.add("command line 命令列命令⾏ (系统⽂字模式下的整⾏执⾏命令)");
103        stringList.add("communication 通讯通讯");
104        stringList.add("compatible 相容兼容");
105        stringList.add("compile time 编译期编译期、编译时");
106        stringList.add("compiler 编译器编译器");
107        stringList.add("component 组件组件");
108        stringList.add("composition 复合、合成、组合组合");
109        stringList.add("computer 电脑、计算机计算机、电脑");
110        stringList.add("concept 概念概念");
111        stringList.add("concrete 具象的实在的");
112        stringList.add("concurrent 并⾏并发");
113        stringList.add("configuration 组态配置");
114        stringList.add("connection 连接,连线(⽹络,资料库)连接");
115        stringList.add("constraint 约束(条件)");
116        stringList.add("construct 构件构件");
117        stringList.add("container 容器容器 ># (存放资料的某种结构如 list, vector…)");
118        stringList.add("containment 内含包容");
119        stringList.add("context 背景关系、周遭环境、上下脉络环境、上下⽂");
120        stringList.add("control 控制元件、控件控件");
121        stringList.add("console 主控台控制台");
122        stringList.add("const 常数(constant 的缩写,C++ 关键字)");
123        stringList.add("constant 常数(相对於 variable)常量");
124        stringList.add("constructor(ctor)建构式构造函数 ># (与class 同名的⼀种 member functions)"); 125        stringList.add("copy (v) 复制、拷贝拷贝");
126        stringList.add("copy (n) 复件, 副本");
127        stringList.add("cover 涵盖覆盖");
128        stringList.add("create 创建、建⽴、产⽣、⽣成创建");
129        stringList.add("creation 产⽣、⽣成创建");
130        stringList.add("cursor 游标光标");
131        stringList.add("custom 订制、⾃定定制");
132        stringList.add("data 资料数据");
133        stringList.add("database 资料库数据库");
134        stringList.add("database schema 数据库结构纲⽬");
135        stringList.add("data member 资料成员、成员变数数据成员、成员变量");
136        stringList.add("data structure 资料结构数据结构");
137        stringList.add("datagram 资料元数据报⽂");
138        stringList.add("dead lock 死结死锁");
139        stringList.add("debug 除错调试");
140        stringList.add("debugger 除错器调试器");
141        stringList.add("declaration 宣告、宣告式声明");
142        stringList.add("deduction 推导(例:template argument deduction)推导、推断");
143        stringList.add("default 预设缺省、默认");
144        stringList.add("defer 延缓推迟");
145        stringList.add("define 定义预定义");
146        stringList.add("definition 定义、定义区、定义式定义");
147        stringList.add("delegate 委派、委托、委任委托");
148        stringList.add("delegation (同上)");
149        stringList.add("demarshal 反编列散集");
150        stringList.add("dereference 提领(取出指标所指物体的内容)解叁考");
151        stringList.add("dereference operator dereference(提领)运算⼦ * 解叁考操作符");
152        stringList.add("derived class 衍⽣类别派⽣类");
153        stringList.add("design by contract 契约式设计");
154        stringList.add("design pattern 设计范式、设计样式设计模式※最近我⽐较喜欢「设计范式」⼀词"); 155        stringList.add("destroy 摧毁、销毁");
156        stringList.add("destructor 解构式析构函数");
157        stringList.add("device 装置、设备设备");
158        stringList.add("dialog 对话窗、对话盒对话框");
159        stringList.add("directive 指令(例:using directive) (编译)指⽰符");
160        stringList.add("directory ⽬录⽬录");
161        stringList.add("disk 碟盘");
162        stringList.add("dispatch 分派分派");
163        stringList.add("distributed computing 分布式计算 (分布式电算) 分布式计算分散式计算 (分散式电算)"); 164        stringList.add("document ⽂件⽂档");
165        stringList.add("dot operator dot(句点)运算⼦ . (圆)点操作符");
166        stringList.add("driver 驱动程式驱动(程序)");
167        stringList.add("dynamic binding 动态系结动态绑定");
168        stringList.add("efficiency 效率效率");
169        stringList.add("efficient ⾼效⾼效");
170        stringList.add("end user 终端⽤户");
171        stringList.add("entity 物体实体、物体");
172        stringList.add("encapsulation 封装封装");
173        stringList.add("enclosing class 外围类别(与巢状类别 nested class 有关)外围类");
174        stringList.add("enum (enumeration) 列举(⼀种 C++ 资料型别)枚举");
175        stringList.add("enumerators 列举元(enum 型别中的成员)枚举成员、枚举器");
176        stringList.add("equal 相等相等");
177        stringList.add("equality 相等性相等性");
178        stringList.add("equality operator equality(等号)运算⼦ == 等号操作符");
179        stringList.add("equivalence 等价性、等同性、对等性等价性");
180        stringList.add("equivalent 等价、等同、对等等价");
181        stringList.add("escape code 转义码转义码");
spring framework表达式assign182        stringList.add("evaluate 评估、求值、核定评估");
183        stringList.add("event 事件事件");
184        stringList.add("event driven 事件驱动的事件驱动的");
185        stringList.add("exception 异常情况异常");
186        stringList.add("exception declaration 异常宣告(ref. C++ Primer 3/e, 11.3)异常声明");
187        stringList.add("exception handling 异常处理、异常处理机制异常处理、异常处理机制");
188        stringList.add("exception specification 异常规格(ref. C++ Primer 3/e, 11.4)异常规范");
189        stringList.add("exit 退离(指离开函式时的那⼀个执⾏点)退出");
190        stringList.add("explicit 明⽩的、明显的、显式显式");
191        stringList.add("export 汇出引出、导出");
192        stringList.add("expression 运算式、算式表达式");
193        stringList.add("facility 设施、设备设施、设备");
194        stringList.add("feature 特性");
195        stringList.add("field 栏位,资料栏(Java)字段, 值域(Java)");
196        stringList.add("file 档案⽂件");
197        stringList.add("firmware 韧体固件");
198        stringList.add("flag 旗标标记");
199        stringList.add("flash memory 快闪记忆体闪存");
200        stringList.add("flexibility 弹性灵活性");
201        stringList.add("flush 清理、扫清刷新");
202        stringList.add("font 字型字体");
203        stringList.add("form 表单(programming ⽤语)窗体");
204        stringList.add("formal parameter 形式叁数形式叁数");
205        stringList.add("forward declaration 前置宣告前置声明");
206        stringList.add("forwarding 转呼叫,转发转发");
207        stringList.add("forwarding function 转呼叫函式,转发函式转发函数");
208        stringList.add("fractal 碎形分形");
209        stringList.add("framework 框架框架");
210        stringList.add("full specialization 全特化(ref. partial specialization)");
211        stringList.add("function 函式、函数函数");
212        stringList.add("function call operator 同 call operator");
213        stringList.add("function object 函式物件(ref. C++ Primer 3/e, 12.3)函数对象");
214        stringList.add("function overloaded resolution 函式多载决议程序函数重载解决(⽅案)");
215        stringList.add("functionality 功能、机能功能");
216        stringList.add("function template 函式模板、函式范本函数模板");
217        stringList.add("functor 仿函式仿函式、函⼦");
218        stringList.add("game 游戏游戏");
219        stringList.add("generate ⽣成");
220        stringList.add("generic 泛型、⼀般化的⼀般化的、通⽤的、泛化");

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。

发表评论