package com.alibaba.tamper; import java.util.HashMap; import java.util.Map; import com.alibaba.tamper.core.BeanMappingException; import com.alibaba.tamper.core.BeanMappingExecutor; import com.alibaba.tamper.core.BeanMappingParam; import com.alibaba.tamper.core.config.BeanMappingConfigHelper; import com.alibaba.tamper.core.config.BeanMappingEnvironment; import com.alibaba.tamper.core.config.BeanMappingObject; /** * Bean<->Map操作的处理单元 * * <pre> * <code> * 使用例子: * BeanMap beanMap = BeanMap.create(srcClass); * Map properties = beanMap.describe(src);// 将bean的属性设置到map对象上 * beanMap.populate(src,properties); // 将map对象数据设置到bean的属性上 * </code> * </pre> * * TODO : 后期支持单个属性的put/get操作 * * @author jianghang 2011-6-8 上午11:11:13 */ public class BeanMap { private BeanMappingObject describeConfig; // 对应的Bean Mapping配置 private BeanMappingObject populateConfig; // 对应的Bean Mapping配置 BeanMap(BeanMappingObject describeConfig, BeanMappingObject populateConfig){ this.describeConfig = describeConfig; this.populateConfig = populateConfig; } /** * 创建srcClass和targetClass之间的BeanMapping操作 */ public static BeanMap create(Class srcClass) { BeanMappingObject describeConfig = BeanMappingConfigHelper.getInstance().getBeanMapObject(srcClass, Map.class, true); BeanMappingObject populateConfig = BeanMappingConfigHelper.getInstance().getBeanMapObject(Map.class, srcClass, true); return new BeanMap(describeConfig, populateConfig); } /** * 将bean的属性转化为Map对象 * * @param src * @return * @throws BeanMappingException */ public Map describe(Object src) throws BeanMappingException { Map result = new HashMap(); BeanMappingParam param = new BeanMappingParam(); param.setSrcRef(src); param.setTargetRef(result); param.setConfig(this.describeConfig); param.setProcesses(BeanMappingEnvironment.getBeanMapVps()); // 执行mapping处理 BeanMappingExecutor.execute(param); return result; } /** * 将map的属性映射到bean对象 * * @param target * @param properties * @throws BeanMappingException */ public void populate(Object target, Map properties) throws BeanMappingException { BeanMappingParam param = new BeanMappingParam(); param.setSrcRef(properties); param.setTargetRef(target); param.setConfig(this.populateConfig); param.setProcesses(BeanMappingEnvironment.getBeanMapVps()); // 执行mapping处理 BeanMappingExecutor.execute(param); } }