我的Spring批处理代码读取数据并将数据写入数据库。我有两个批处理作业类,并且两个作业在读取器对象下面的读取器逻辑(几乎相同)具有不同的pojo泛型类型(如Pojo1和Pojo2)。

FlatFileItemReader<DifferentPojoName> reader = new FlatFileItemReader<>();


现在,我想在一个单独的@Component类中创建一个通用的读取器逻辑。这样,两个作业类将使用相同的读取器逻辑。

但是问题是如何在阅读器对象中动态更改Pojo类型?

请提出建议。

最佳答案

如何在Java中动态更改对象的泛型类型?


泛型是提高代码类型安全性的编译功能。
因此这是不可能的。

较干净的方法是使用所需的泛型声明不同的FlatFileItemReader bean。
@Bean批注可能对您有所帮助。

@Bean
public FlatFileItemReader<Foo> readerFoo(){
  return new FlatFileItemReader<>();
}

@Bean
public FlatFileItemReader<Bar> readerBar(){
  return new FlatFileItemReader<>();
}


现在将它们注入您需要的位置:

@Autowired
FlatFileItemReader<Bar> readerBar;

@Autowired
FlatFileItemReader<Foo> readerFoo;

10-07 12:00