package com.alibaba.tamper.process;
import com.alibaba.tamper.core.BeanMappingException;
import com.alibaba.tamper.core.config.BeanMappingField;
import com.alibaba.tamper.core.helper.ReflectionHelper;
import com.alibaba.tamper.core.process.ValueProcess;
import com.alibaba.tamper.core.process.ValueProcessInvocation;
/**
* set操作流程中, 尝试创建一下嵌套的bean实例,通过反射newInstance,
*
* @author jianghang 2011-5-28 下午11:32:38
*/
public class BeanCreatorValueProcess implements ValueProcess {
@Override
public Object process(Object value, ValueProcessInvocation invocation) throws BeanMappingException {
if (value != null) {
BeanMappingField currentField = invocation.getContext().getCurrentField();
if (currentField.isMapping()) {
// 判断下是否在处理嵌套的mapping
// 这里的value代表从get取出来的嵌套对象,如果有值,说明在目标对象上也需要创建targetClass对象进行复制
value = ReflectionHelper.newInstance(invocation.getContext().getCurrentField().getTargetField().getClazz());
}
}
// 继续下一步的调用
return invocation.proceed(value);
}
}