错误案例
现象描述:性能测试时,发现CPU占有率很高,经过jprofiler的分析,发现CPU大部分被BeanUtils占用了,成了性能瓶颈。
错误分析
工作中,经常会碰到两个bean之间的拷贝,如MemberDO拷贝到MemberVO BeanUtils.copyProperties(member, memberVO); BeanUtils是通过效率相对低的反射机制进行属性值的拷贝,而cglib中工具类BeanCopier性能上优于BeanUtils的原因就在于,前者在字节码级别生成了前文所述的setter和getter拷贝属性值的指令代码;
正确用法
正确用法: //cache此copy实例
private static BeanCopier copy = BeanCopier.create(Bean.class, Bean2.class, false); public MemberVO copy(MemberDO member){ MemberVO memberVO = new MemberVO(); copy.copy(member, memberVO, null); return memberVO; }