BeanWrapperFieldSetMapper替代方案,避免setTargetType/setPrototypeBeanName
BeanWrapperFieldSetMapper alternative, to avoid setTargetType/setPrototypeBeanName
我需要一种摆脱 fieldSetMapper.setTargetType
的方法,因为我不想每次有新文件要读取时都添加 POJO。可能吗?
Springbatch 有几个 FieldSetMapper
开箱即用的实现:Documentation (FieldSetMapper)
例如,您可以使用 PassThroughFieldSetMapper
在处理器中获取 FieldSet
对象。您可以对 ArrayFieldSetMapper
执行相同的操作以获取数组对象。
但对于您的情况,我认为您需要实现自己的 FieldSetMapper
。例如,它可以有一个 names
属性(带有 setter)和一个 targetClass
属性(带有 setter)。使用 Reflect,然后您可以将对象转换为您想要的 class 并根据作为参数传递的名称调用 setters。
这是 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);
我需要一种摆脱 fieldSetMapper.setTargetType
的方法,因为我不想每次有新文件要读取时都添加 POJO。可能吗?
Springbatch 有几个 FieldSetMapper
开箱即用的实现:Documentation (FieldSetMapper)
例如,您可以使用 PassThroughFieldSetMapper
在处理器中获取 FieldSet
对象。您可以对 ArrayFieldSetMapper
执行相同的操作以获取数组对象。
但对于您的情况,我认为您需要实现自己的 FieldSetMapper
。例如,它可以有一个 names
属性(带有 setter)和一个 targetClass
属性(带有 setter)。使用 Reflect,然后您可以将对象转换为您想要的 class 并根据作为参数传递的名称调用 setters。
这是 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);