仅在文件存在时如何注入Optional <resource>?

时间:2018-07-31 09:43:09

标签: java spring

我可以告诉Spring仅在资源文件确实存在的情况下注入资源吗?因为对于以下情况,如果定义了属性res.isPresent()my.path.to.file始终为true。但我只希望背后的资源确实存在。

@Value("${my.path.to.file}")
private Optional<Resource> res;

1 个答案:

答案 0 :(得分:1)

基本上,有两种选择,具体取决于可以使用哪种类型的自动装配。 如果可以使用(或轻松更改代码以使用)构造函数自动装配,则可以执行以下操作:

@Autowired
public YourBean(@Value("${my.path.to.file}") String path) {
  if (resourceExists) { //your check here
    res = Optional.of(yourExistingResource);
  } else {
    res = Optional.empty();
  }
}

第二个选择是使用@PostConstruct注释

@Value("${my.path.to.file}")
private String resourceName;
private Optional<Resoucre> res;

@PostConstruct
private void init() {
  //check that resource exists. At this time all dependencies are already injected.
  if (exists) {
    //init yourResoucre if it is not initialized earlier
    res = Optional.of(yourResource);
  } else {
    res = Optional.empty();
  }
}

我希望使用构造函数注入