关于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();  
    }
}