Spring 注入 Java 可选
Spring injection with Java's Optional
尝试注入 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>
,并简单地 return 一个 String
,那么就可以了!
我知道 Spring
有它自己的可选依赖项,但我很困惑为什么它不起作用(无论我在网上读到什么都说它应该),而且我也不明白它是如何初始化它的到 Optional.empty()
?
you can express the non-required nature of a particular dependency through Java 8’s java.util.Optional, as the following example shows:
public class SimpleMovieLister {
@Autowired
public void setMovieFinder(Optional<MovieFinder> movieFinder) {
...
}
}
所以使用 Optional 作为 bean 的类型不是一个好主意。
尝试注入 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>
,并简单地 return 一个 String
,那么就可以了!
我知道 Spring
有它自己的可选依赖项,但我很困惑为什么它不起作用(无论我在网上读到什么都说它应该),而且我也不明白它是如何初始化它的到 Optional.empty()
?
you can express the non-required nature of a particular dependency through Java 8’s java.util.Optional, as the following example shows:
public class SimpleMovieLister { @Autowired public void setMovieFinder(Optional<MovieFinder> movieFinder) { ... } }
所以使用 Optional 作为 bean 的类型不是一个好主意。