使用Spring将文本文件直接注入String

roz*_*ner 19 java spring inject

所以我有这个

@Value("classpath:choice-test.html")
private Resource sampleHtml;
private String sampleHtmlData;

@Before
public void readFile() throws IOException {
    sampleHtmlData = IOUtils.toString(sampleHtml.getInputStream());
}
Run Code Online (Sandbox Code Playgroud)

我想知道的是,是否可以不使用readFile()方法并将sampleHtmlData注入文件的内容.如果不是,我只需要忍受这个,但这将是一个很好的捷径.

Tom*_*icz 38

从技术上讲,你可以用XML和工厂bean和方法的笨拙组合来做到这一点.但是,为什么要使用Java配置呢?

@Configuration
public class Spring {

    @Value("classpath:choice-test.html")
    private Resource sampleHtml;

    @Bean
    public String sampleHtmlData() {
        try(InputStream is = sampleHtml.getInputStream()) {
            return IOUtils.toString(is);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,我还sampleHtml.getInputStream()使用try-with-resources惯用法关闭了返回的流.否则你会得到内存泄漏.

  • 谢谢.我使用`new String(Files.readAllBytes(sampleHtml.getFile().toPath()));而不是使用IOUtils. (7认同)
  • 而不是使用IOUtils我建议使用`StreamUtils.copyToString(in);`:这与spring捆绑在一起,所以无论如何你都有这个方法,与@EvanHu的提议相反,我认为如果你的资源不在文件系统. (2认同)