如何在Spring中的@Bean方法中定义可选参数(依赖项)?

Jon*_*Gao 10 java spring spring-boot

当使用spring注释@Bean来声明某些实例时,参数是注入的,并且这些是必需的,如果找不到实例,则会抛出NoSuchBeanException.

如何使它可选?就像是@Autowired(required = false)

例如

@Configuration
class SomeConfiguration {

  @Bean
  public SomeComponent someComponent(Depend1 depend1,
                                     Depend2 depend2) {
    SomeComponent someComponent = new SomeComponent();
    someComponent.setDepend1(depend1);
    if (depend2 != null) {
      someComponent.setDepend2(depend2);
    }
    return someComponent;
  }
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*mar 12

只需使用Optional:

@Bean
public SomeComponent someComponent(Depend1 depend1, Optional<Depend2> depend2) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

  • 使用 `Optional` 作为参数时,Intellij IDEA 会显示建议警告。如果没有更好的方法,我会使用它 (2认同)

Fab*_*cio 8

您可以@Autowired(required = false)在参数上使用:

@Configuration
class SomeConfiguration {

  @Bean
  public SomeComponent someComponent(Depend1 depend1,
                                     @Autowired(required = false) Depend2 depend2) {
    SomeComponent someComponent = new SomeComponent();
    someComponent.setDepend1(depend1);
    if (depend2 != null) {
      someComponent.setDepend2(depend2);
    }
    return someComponent;
  }
}
Run Code Online (Sandbox Code Playgroud)