java - 仅当文件存在时如何注入(inject) Optional<Resource>?

标签 java spring

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

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

最佳答案

根据可以使用的 Autowiring 类型,基本上有两种选择。 如果您可以使用(或轻松更改您的代码以使用)构造函数 Autowiring ,那么您可以执行以下操作:

@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();
  }
}

我更喜欢构造函数注入(inject)

关于java - 仅当文件存在时如何注入(inject) Optional<Resource>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51610334/

相关文章:

java - 使用 java.io.File 时出现 NullPointerException

java - 配置内置 Jackson MapDeserializer

java - 将解析哪个 View ,来自 spring 文档的代码

java - 黑客可以更改模型属性吗? Spring , java

java - MySQL 数据库在 8 小时后断开连接。如何预防?

java 。图形流 : disparition edges problem

java - 在静态工厂方法中使用重写方法创建实例时,如何访问封闭类中的私有(private)字段?

Spring MVC : Common param in all requests

java - 并发运行 spring 框架事务更新错误数据

java - Spring WS 在模式实例的命名空间声明方面存在问题