依赖服务后创建的可选 bean

Optional bean created after dependent service

我正在尝试将可选 bean 注入到服务中。该 bean 已成功创建,但始终 从属服务之后。知道为什么会出错吗?

Spring 使用 Boot 2.5.0。不使用 Optional,一切正常。

Application.java

@SpringBootApplication
@Configuration
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class);
    }

    @Bean
    public Optional<SomeClass> someClass() {
        System.out.println("creating bean");
        return Optional.of(new SomeClass("someName"));
    }

}

SomeClass.java

@Value
public class SomeClass {
    String name;
}

SomeService.java

@Service
public class SomeService {

    public SomeService(Optional<SomeClass> some) {
        System.out.println(
                some.map(SomeClass::getName).orElse("empty")
        );
    }

}

输出:

empty
creating bean

当自动装配依赖项时,应该在注入点使用 Optional,以指示 bean 可能可用也可能不可用。由于不同的原因(条件配置,或者只是导致 bean null 的设置错误),bean 不可用。

创建 Optional bean 与使用 Optional 作为注入点不同。

理想情况下,您只需创建 bean,如果处理失败,将立即创建,处理它并 return null。现在,当在注入点使用 Optional 时,它将看到 null 并且 Optional.empty() 将自动注入。