猿问

Spring注入与Java的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>,并简单地返回String,那么它就可以了!


我知道Spring有它自己的可选依赖项,但我很困惑为什么这不起作用(无论我在网上读到的内容都说它应该),而且我也不明白它是如何将其初始化为Optional.empty()?


四季花海
浏览 100回答 1
1回答

白猪掌柜的

文档说:您可以通过 Java 8 的 java.util.Optional 来表达特定依赖项的非必需性质,如以下示例所示:public class SimpleMovieLister {    @Autowired     public void setMovieFinder(Optional<MovieFinder> movieFinder) {         ...     } }所以使用Optional作为bean的类型并不是一个好主意。
随时随地看视频慕课网APP

相关分类

Java
我要回答