Tiberiu
注入しようとするとOptional<T>
、春は決して私の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
、独自のオプションの依存関係を持っていますが、私はこれが仕事をしない理由として困惑しています(私はオンラインで読むものは何でもそれが必要と言う)、そして私も、それはそれを初期化する方法を理解していませんかOptional.empty()
?
JB Nizet:
ドキュメントは言います:
次の例が示すように、Javaの8のjava.util.Optionalを通じて特定の依存関係の非必要な性質を表現することができます。
public class SimpleMovieLister { @Autowired public void setMovieFinder(Optional<MovieFinder> movieFinder) { ... } }
だから、豆の種類などのオプションを使用することは良いアイデアではありません。