Java中不是必需的bean

Java中不是必需的bean,java,spring,config,javabeans,Java,Spring,Config,Javabeans,我有一个ApplicationConfig.java文件,其中包含2个不是必需的bean @Configuration @PropertySource("classpath:config/service/application.properties") public class ApplicationConfig { @Bean public ServiceOneClient serviceClient(@Value("${client.one.host}") String hos

我有一个ApplicationConfig.java文件,其中包含2个不是必需的bean

 @Configuration
 @PropertySource("classpath:config/service/application.properties")
 public class ApplicationConfig {
  @Bean
  public ServiceOneClient serviceClient(@Value("${client.one.host}") String host)) {
    return new ClientOneImpl(String.format("%s:%d", host, 80));
  }

  @Bean
  public ServiceTwoClient serviceClient(@Value("${client.two.host}") String host)) {
    return new ClientTwoImpl(String.format("%s:%d", host, 80));
  }
}
使用这个jar的服务不必同时初始化两个客户端。但如果我们没有为这两个服务初始化主机,则会收到错误消息: org.springframework.beans.factory.BeanCreationException:创建名为的bean时出错,无法解析占位符“client.one.host”

有没有办法将bean标记为非强制性的?或其他解决方案?

使用注释:

@Configuration
@PropertySource("classpath:config/service/application.properties")
public class ApplicationConfig {
  @Bean
  @ConditionalOnProperty("client.one.host")
  public ServiceOneClient serviceClient(@Value("${client.one.host}") String host)) {
    return new ClientOneImpl(String.format("%s:%d", host, 80));
  }

  @Bean
  @ConditionalOnProperty("client.two.host")
  public ServiceTwoClient serviceClient(@Value("${client.two.host}") String host)) {
    return new ClientTwoImpl(String.format("%s:%d", host, 80));
  }
}
有关自动配置时条件的更多信息,请参见例如。第节介绍了
@ConditionalOnProperty
注释。

使用注释:

@Configuration
@PropertySource("classpath:config/service/application.properties")
public class ApplicationConfig {
  @Bean
  @ConditionalOnProperty("client.one.host")
  public ServiceOneClient serviceClient(@Value("${client.one.host}") String host)) {
    return new ClientOneImpl(String.format("%s:%d", host, 80));
  }

  @Bean
  @ConditionalOnProperty("client.two.host")
  public ServiceTwoClient serviceClient(@Value("${client.two.host}") String host)) {
    return new ClientTwoImpl(String.format("%s:%d", host, 80));
  }
}
有关自动配置时条件的更多信息,请参见例如。第节介绍了
@ConditionalOnProperty
注释