创建 FileInputStream 的 bean

Creating bean of FileInputStream

我需要在 JAVA 的同一个 excel 工作簿中写 3 个不同的 sheet。我需要将这个任务分成 3 个不同的 classes,每个 class 应该在同一个文件中写一个 excel sheet。现在每次 class 结束时,我都需要将数据刷新到那个特定的 sheet。比如,

inputStream =new FileInputStream("FileName.xls");
wb_template = new XSSFWorkbook(inputStream);
inputStream.close();
wb = new SXSSFWorkbook(wb_template);

//Logic here

FileOutputStream out = new FileOutputStream("FileName.xls");
workbook.write(out);
    wb.dispose();
    out.close();

并在另一个 class 中为另一个 sheet 重复这个打开和关闭的公共部分。

现在,由于我的 class 被注释了 @Component 注释,我根本无法在我的 classes 中创建 FileOutputStream with new 作为上面的示例代码。 所以我需要为他们创建 bean。所以现在我的疑问是,我需要为每种类型创建多少个 bean。即 FileInputStreamSXSSFWorkbookFileOutputStream?因为我需要在每个 class 结束时处理工作簿并且需要在每个 class 结束时关闭 FileOutputStream,单个 bean 就足够了吗???

我是这个领域的新手。任何线索将不胜感激。

我认为输入和输出流不是 Spring bean 的理想选择。
你的 excel sheet 作者是更好更直观的候选人:

interface ExcelSheetWriter {
    void writeOneSheet(String excelFileName);
}

@Configuration
class Config {
    @Bean(name="sheet1Writer) ExcelWriter getSheet1Writer() {
        return new Sheet1Writer(); //implements ExcelWriter
    }
}

class ExcelDocumentWriter {
    @Autowired @Qualifier("sheet1Writer") ExcelWriter sheet1Writer;
    @Autowired @Qualifier("sheet2Writer") ExcelWriter sheet2Writer;
    @Autowired @Qualifier("sheet3Writer") ExcelWriter sheet3Writer;
    //... use them to write the entire document
}

很好 spring bean 在初始化后不会改变状态。