Spring 在依赖服务之后创建的可选bean

Spring 在依赖服务之后创建的可选bean,spring,dependency-injection,Spring,Dependency Injection,我正在尝试将可选bean注入到服务中。bean已成功创建,但始终在依赖服务之后创建。你知道为什么会出问题吗 使用弹簧靴2.5.0。不使用选件,一切正常 Application.java @springboot应用程序 @配置 公共类应用程序{ 公共静态void main(字符串[]args){ SpringApplication.run(Application.class); } @豆子 公共可选类(){ System.out.println(“创建bean”); 返回可选的.of(新的Some

我正在尝试将可选bean注入到服务中。bean已成功创建,但始终在依赖服务之后创建。你知道为什么会出问题吗

使用弹簧靴2.5.0。不使用
选件
,一切正常

Application.java

@springboot应用程序
@配置
公共类应用程序{
公共静态void main(字符串[]args){
SpringApplication.run(Application.class);
}
@豆子
公共可选类(){
System.out.println(“创建bean”);
返回可选的.of(新的SomeClass(“someName”));
}
}
SomeClass.java

@Value
公共类{
字符串名;
}
SomeService.java

@服务
公共类服务{
公共服务(可选部分){
System.out.println(
some.map(SomeClass::getName).orElse(“空”)
);
}
}
输出:

empty
creating bean

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

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


理想情况下,您只需创建bean,如果处理可能失败,您将急切地创建bean,处理它并返回
null
。现在,在注入点使用
Optional
时,将看到
null
Optional.empty()
将自动注入。

,因为它是可选的。它只会在需要的时候建造。另外,应该避免使用
Optional
作为bean类型,您应该只对注入点使用
Optional
。在实际应用程序中,bean创建可能会失败,但我希望应用程序无论如何都能启动。这就是为什么我让
someClass()
方法返回一个可选值。另外,输出不是告诉我bean是在需要之后创建的吗?不,当您调用
map
时,它会在需要时立即创建。返回
Optional
不会阻止bean失败。只需返回
null
(您已经有了一个try/catch来处理故障,否则您将无法返回
可选。空的
),并使用
可选的
作为注入点。您看到的行为是由于双重
可选
,因为
可选
是专门针对注射点处理的。制作
可选
bean与使用
可选
作为注射点不同。感谢您的澄清。现在效果很好。我会接受这个答案,但我不认为我能接受,因为你把它作为评论发布了。