BeanWrapperFieldSetMapper替代,避免使用setTargetType / setPrototypeBeanName

时间:2015-10-19 19:42:51

标签: spring-batch

我需要一种摆脱fieldSetMapper.setTargetType的方法,因为每次有新文件要阅读时我都不想添加POJO。有可能吗?

1 个答案:

答案 0 :(得分:0)

Springbatch有几个FieldSetMapper实现可用的开箱即用:Documentation (FieldSetMapper)

例如,您可以使用PassThroughFieldSetMapper在处理器中获取FieldSet对象。您可以使用ArrayFieldSetMapper执行相同的操作来获取数组对象。

但在你的情况下,我认为你需要实现自己的FieldSetMapper。例如,它可以具有names属性(带有setter)和targetClass属性(带有setter)。使用Reflect,您可以将对象强制转换为所需的类,并根据作为参数传递的名称调用setter。

这是FieldSetMapper的样子:

@Override
public Report mapFieldSet(FieldSet fieldSet) throws BindException {

    T object;
    object.setField(fieldSet.readString(0));
    return object;
}

这里是Reflect的样子:

    Method method = object.getClass().getMethod(methodName);
    method.invoke(object);