依赖服务后创建的可选 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()
将自动注入。
我正在尝试将可选 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()
将自动注入。