所以我有这个
@Value("classpath:choice-test.html")
private Resource sampleHtml;
private String sampleHtmlData;
@Before
public void readFile() throws IOException {
sampleHtmlData = IOUtils.toString(sampleHtml.getInputStream());
}
我想知道的是,是否可以不使用readFile()方法,而使用sampleHtmlData来注入文件的内容,如果不行,我只能接受这个方法,但这将是一个很好的捷径。
4条答案
按热度按时间zxlwwiss1#
从技术上讲,您可以使用XML以及工厂bean和方法的笨拙组合来实现这一点,但是既然可以使用Java配置,为什么还要这么麻烦呢?
注意,我还使用 try-with-resources 习惯用法关闭了从
sampleHtml.getInputStream()
返回的流,否则会出现内存泄漏。8ljdwjyq2#
据我所知,没有内置的功能,但你可以自己做,例如:
其中readContent()返回从路径/to/my_file上的文件读取的字符串。
46qrfjad3#
如果您希望每次进样减少到一行,您可以添加注解和条件转换器。这也将保留IntelliJ中的ctrl-click导航和自动完成。
lbsnaicq4#
采用@Marcin Wisnicki,可以定义一个注解,如“StringResource”,默认值为空字符串,并定义实用程序类,如“StringResouceReader”,一个修改后的转换器,如下所示:
1.如果StringResource作为@StringResource @Value应用于字段(类路径:path),则path上的资源内容将作为字符串自动注入
1.如果StringResource作为@StringResource(限定符)应用于类,并将@Value(类路径:路径)应用于字段,并且如果字段或成员的名称以限定符开头,则路径上的资源内容将作为字符串自动注入
这种方法的优点是,当在同一个类的不同字段中自动注入多个资源时,可以使代码更简洁。可以在类上指定@StringResource(限定符),并像往常一样在上使用@Value。
字符串资源类
字符串资源渲染
然后在SpringApplication构造函数中注册转换器