破解既有的行业痛点,解决信息流、业务流、资金流、物流等工业电商核心的方案
解决商品、商家与海关和国检系统备案,订单跨境支付和一键报关的方案
提供车源发布、车源查找、求购发布、报关报检、汽车物流、汽车配件相关服务
全网平台搭建,多触点连接用户,母婴店,专卖店、卖场、商城系统多模式并存
“互联网+零售” 对实体进行补充,又能让企业通过大数据更好地了解消费者需求
汽车配件电商平台能够打通产业链、提高工作效率、去中间化、降低成本等
农产品电商平台直连农产品产地,溯源追溯,传统农业与互联网+进行优质结合
在线考试/教育培训/职业技能/企业内训等,提供教育各个行业的解决方案
使用Spring Boot开发风格做到一键启动和部署,简化分布式系统开发,易二次开发和维护
易写区块链,定制开发私链、联盟链、公链,提供所有源代码,适合二次开发
平台自营+供应商入驻,的高并发解决方案,SpringCloud Alibaba技术架构
区块链+溯源不可篡改,溯源追溯,传统行业(例如农业等)与区块链进行优质结合
供求、求购方数据整合,双向打通货源“供应链”和全渠道“销售链”的电商平台
知识付费/教育培训/职业技能/企业内训等,源码100%开源的在线课堂软件
互联网的技术架构、全新的UI设计、丰富促销体系、多种支付方式、快递实时跟踪
多题型、题库测试、错题收集、章节练习、试卷练习、考试记录、自动判卷、发放证书
易写科技电商系统主体框架全部采用Apache主流框架进行开发,没有任何二次封装,方便二次开发
采用SpringCloud Alibaba技术架构,基于Maven构建,数据库读写分离、支持分库分表、独立图片和搜索服务器等
易写科技商城由京东、海尔电商公司互联网人开发而成,拥有解决高并发、高可用、秒杀等电商方面丰富的经验
易写科技商城代码和数据库开源,数据库每个表、每个字段都有注释,代码每个方法都有注释
易写科技商城系统可以有效防止SQL注入、XSS攻击、CSRF攻击、核心模块采用MD5加密传输,保证系统和数据安全
易写科技商城系统不仅在架构和代码层面把细节做到了,并且在业务流程也是
对象拷贝的应用现状简介:
商城系统中经常需要两个对象进行属性的拷贝,不能否认逐个的对象拷贝是最快速最安全的做法,但是当数据对象的属性字段数量超过程序员的容忍的程度,代码因此变得臃肿不堪,使用一些方便的对象拷贝工具类将是很好的选择。
目前流行的较为公用认可的工具类:
Apache的两个版本,原理都是反射机制
org.apache.commons.beanutils.PropertyUtils.copyProperties(Object dest, Object orig)
org.apache.commons.beanutils.BeanUtils.copyProperties(Object dest, Object orig)
Spring版本,原理是反射机制
org.springframework.beans.BeanUtils.copyProperties(Object source, Object target, Class editable, String[] ignoreProperties)
cglib版本,原理是使用动态代理,并发量越大,效率高
net.sf.cglib.beans.BeanCopier.copy(Object paramObject1, Object paramObject2, Converter paramConverter)
例子:
创建易写科技Bean,另外一个bean是To易写科技Bean,就不列举出来
package com.易写科技.test;
public class 易写科技Bean {
private String name;
private int age;
private String address;
private String idno;
private double money;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getIdno() {
return idno;
}
public void setIdno(String idno) {
this.idno = idno;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
}
现在分别测试对象复制一次,1000次,10000次,1000000次的销量
一次的代码为:
package com.易写科技.test;
public class 易写科技Main {
public static void main(String[] args) throws Exception {
易写科技Bean frombean = new 易写科技Bean();
frombean.setAddress("北京市昌平区青年创业大厦6层");
frombean.setAge(30);
frombean.setMoney(100000.00);
frombean.setIdno("18612670879");
frombean.setName("测试javabean");
long l1 = System.currentTimeMillis();
To易写科技Bean toBean1 = new To易写科技Bean();
org.apache.commons.beanutils.BeanUtils.copyProperties(toBean1, frombean);
long l2 = System.currentTimeMillis();
System.out.println("org.apache.commons.beanutils.BeanUtils,一次时间:" + (l2 - l1));
long l3 = System.currentTimeMillis();
To易写科技Bean toBean2 = new To易写科技Bean();
org.apache.commons.beanutils.PropertyUtils.copyProperties(toBean2, frombean);
long l4 = System.currentTimeMillis();
System.out.println("org.apache.commons.beanutils.PropertyUtils,一次时间:" + (l4 - l3));
long l5 = System.currentTimeMillis();
To易写科技Bean toBean3 = new To易写科技Bean();
org.springframework.beans.BeanUtils.copyProperties(frombean, toBean3);
long l6 = System.currentTimeMillis();
System.out.println("org.springframework.beans.BeanUtils,一次时间:" + (l6 - l5));
long l7 = System.currentTimeMillis();
final net.sf.cglib.beans.BeanCopier bc = net.sf.cglib.beans.BeanCopier.create(
易写科技Bean.class, To易写科技Bean.class, false);
To易写科技Bean toBean4 = new To易写科技Bean();
bc.copy(frombean, toBean4, null);
long l8 = System.currentTimeMillis();
System.out.println("net.sf.cglib.beans.BeanCopier,一次时间:" + (l8 - l7));
}
}
运行结果为:
org.apache.commons.beanutils.BeanUtils,一次时间:241
org.apache.commons.beanutils.PropertyUtils,一次时间:7
org.springframework.beans.BeanUtils,一次时间:28
net.sf.cglib.beans.BeanCopier,一次时间:8
100次结果:
org.apache.commons.beanutils.BeanUtils,100次时间:278
org.apache.commons.beanutils.PropertyUtils,100次时间:18
org.springframework.beans.BeanUtils,100次时间:31
net.sf.cglib.beans.BeanCopier,100次时间:30
10000次结果
org.apache.commons.beanutils.BeanUtils,10000次时间:823
org.apache.commons.beanutils.PropertyUtils,10000次时间:155
org.springframework.beans.BeanUtils,10000次时间:80
net.sf.cglib.beans.BeanCopier,10000次时间:67
1000000次结果:
org.apache.commons.beanutils.BeanUtils,1000000次时间:11702
org.apache.commons.beanutils.PropertyUtils,1000000次时间:4318
org.springframework.beans.BeanUtils,1000000次时间:404
net.sf.cglib.beans.BeanCopier,1000000次时间:79
由以上测试得出结论,cglib 的效率是 直接反射的3倍以上,另外,cglib的beanMap在初次创建一个类的缓存时会耗费一定的时间,之后使用了缓存,再创建相同的bean就不再有多余的时间消耗了。所以量越大消耗反而越小,其他量越大,消耗的时间也随着增大。
所以易写科技是采用cglib来作为对象的复制的。
工作日:9:00-18:00
售前:18612670879
微信:18612670879
Q Q:43006111