我可以告诉Spring仅在资源文件确实存在的情况下注入资源吗?因为对于以下情况,如果定义了属性res.isPresent()
,my.path.to.file
始终为true。但我只希望背后的资源确实存在。
@Value("${my.path.to.file}")
private Optional<Resource> res;
答案 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();
}
}
我希望使用构造函数注入