使用 Spring 将文本文件直接注入字符串

2022-09-02 03:10:31

所以我有这个

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

@Before
public void readFile() throws IOException {
    sampleHtmlData = IOUtils.toString(sampleHtml.getInputStream());
}

我想知道的是,是否有可能不使用readFile()方法,并将样本HtmlData与文件的内容一起注入。如果不是这样,我将不得不忍受这一点,但这将是一个不错的捷径。


答案 1

从技术上讲,您可以使用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, StandardCharsets.UTF_8);
        }
    }
}

请注意,我还通过使用“尝试使用资源”习语关闭了从返回的流。否则,您将获得内存泄漏。sampleHtml.getInputStream()


答案 2

据我所知,没有内置功能,但您可以自己动手,例如:

<bean id="fileContentHolder">
  <property name="content">
    <bean class="CustomFileReader" factory-method="readContent">
      <property name="filePath" value="path/to/my_file"/>
    </bean>
   </property>
</bean>

其中 readContent() 返回一个字符串,该字符串从 path/to/my_file 上的文件中读取。


推荐