Spring 在依赖服务之后创建的可选bean
我正在尝试将可选bean注入到服务中。bean已成功创建,但始终在依赖服务之后创建。你知道为什么会出问题吗 使用弹簧靴2.5.0。不使用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
选件
,一切正常
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与使用可选
作为注射点不同。感谢您的澄清。现在效果很好。我会接受这个答案,但我不认为我能接受,因为你把它作为评论发布了。