当尝试注入Optional<T>
时,Spring不会调用我的bean,而是注入Optional.empty()
。
以下是一些示例代码:
@Configuration
public class Initialize {
@Value("optionalValue")
private String testString;
@Bean (name = "getOptionalString")
public Optional<String> getOptionalString() {
return Optional.of(this.testString); //breakpoint put here, is never called
}
}
@Component
public class Test {
public Test(@Qualifier("getOptionalString") Optional<String> optional) {
// optional's value is Optional.empty() here
}
我注意到(通过设置断点)@Bean
从未被调用。如果我要删除Optional<String>
,而只是返回一个String
,那么它将起作用!
我知道Spring
有其自己的可选依赖项,但是我对为什么它不起作用感到困惑(无论我在网上阅读什么都说应该如此),而且我也不了解它如何将其初始化为{ {1}}?
答案 0 :(得分:2)
您可以通过Java 8的java.util.Optional来表达特定依赖项的非必需性质,如以下示例所示:
public class SimpleMovieLister { @Autowired public void setMovieFinder(Optional<MovieFinder> movieFinder) { ... } }
因此,使用Optional作为bean的类型不是一个好主意。