关于BeanCopier的使用
在做业务系统开发时,我们通常分为三层,一层时对外的服务接口层,一层时内部业务逻辑层,一层是数据存储层,没层都会定义自己的类,但是这三层需要交互,交互就会涉及到数据传输,数据传输就会涉及到数据转换,因为我们每层都定义自己类来处理相关的逻辑。我们通常会把业务层的对象转换成持久层的对象再去做持久化存储,对象之间的转换我们通常使用BeanCopier来操作,但是在实际项目中发现大家使用BeanCopier的方式也不统一,有些人喜欢用Converter,有些人不喜欢用Converter,其实关于Converter我一般也不会用,都是自己先使用一把BeanCopier然后再把copy不了的字段手工填写一遍。关于BeanCopier如何使用,曾经看到有人写过下面这个Utils,代码简化了很多,避免定义很多BeanCopier。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | public class BeanCopierUtils { // BeanCopier的内存缓存 public static Map<String, BeanCopier> beanCopierMap = new HashMap<String, BeanCopier>(); public static void copyProperties(Object source,Object target){ String beanKey = generateKey(source.getClass(),target.getClass()); BeanCopier copier = null; if (!beanCopierMap.containsKey(beanKey)) { copier = BeanCopier.create(source.getClass(), target.getClass(), false); beanCopierMap.put(beanKey, copier); }else { copier = beanCopierMap.get(beanKey); } // 没有使用Converter copier.copy(source, target, null); } // BeanCopier缓存的Key private static String generateKey(Class<?>class1,Class<?>class2){ return class1.toString() + class2.toString(); } } |