使用Spring Environment从类路径中注入文件

时间:2013-04-15 08:41:16

标签: java spring dependency-injection spring-3

我的问题:如何使用File变量在课堂上注入Environment

我在properties中指定了我需要阅读的文件的路径:

myFile.path=classpath:myFile.json

我曾经有一个XML应用程序上下文为property-placeholder定义properties.file,然后我可以使用@Value注入我的文件:

@Value("${myFile.path}")
private File myFile;

然而,现在我想做点什么:

@Inject
private Environment environment;

private File myFile;

@PostConstruct
private void init() {
    myFile = environment.getProperty("myFile.path", File.class);
}

但抛出异常:

Caused by: java.io.FileNotFoundException: 
    classpath:myFile.json (No such file or directory)

我也试过类似myFile = environment.getProperty("myFile.path", Resource.class).getFile();的东西,但抛出了另一个异常。

如果知道属性中定义的路径可以是绝对路径还是类路径相对,我如何实现注入文件?

1 个答案:

答案 0 :(得分:2)

您可以尝试注入ResourceLoader,并使用它来加载引用的类路径资源:

@Autowired
private ResourceLoader resourceLoader;

...

@PostConstruct
private void init() {
    String resourceReference = environment.getProperty("myFile.path");
    Resource resource = resourceLoader.getResource(resourceReference);
    if (resource != null) {
        myFile = resource.getFile();
    }
}