3

我的项目中有一个用于 web 服务客户端的 bean,它需要注入一些配置设置。我们使用的是 Spring 3.1。目前最好的想法是使用 @Value 注释,如下所示:

@Service
public class MyWebServiceClient {
  private String endpointUrl;

  @Required
  @Value("${mywebserviceClient.endpointUrl}")
  public void setEndpointUrl(String endpointUrl) {
    this.endpointUrl = endpointUrl;
  }

}

但是,我真的不喜欢将属性名称硬编码到类中。它还存在一个问题,即无法在同一上下文中拥有多个具有不同设置的客户端(因为只有一个属性并且这是硬编码的)。有没有更优雅的方式通过自动装配来做到这一点,或者我应该求助于普通的旧 xml 配置来做到这一点?

4

1 回答 1

3

我会使用 JavaConfig 来做到这一点。

更具体地说,我将使用 JavaConfig 创建多个实例MyWebServiceClient,并@Value使用正确的端点属性键来配置配置。

像这样的东西:

@Configuration
public class MyWebServiceConfig {
    @Required
    @Value("${myWebserviceClient1.endpointUrl")
    private String webservice1Url;

    @Required
    @Value("${myWebserviceClient2.endpointUrl")
    private String webservice2Url;

    @Required
    @Value("${myWebserviceClient3.endpointUrl")
    private String webservice3Url;

    @Bean
    public MyWebServiceClient webserviceClient1() {
        MyWebServiceClient client = createWebServiceClient();
        client.setEndpointUrl(webservice1Url);
        return client;
    }

    @Bean
    public MyWebServiceClient webserviceClient2() {
        MyWebServiceClient client = createWebServiceClient();
        client.setEndpointUrl(webservice2Url);
        return client;
    }

    @Bean
    public MyWebServiceClient webserviceClient3() {
        MyWebServiceClient client = createWebServiceClient();
        client.setEndpointUrl(webservice3Url);
        return client;
    }
}

有了这个,你应该有 3 个实例,MyWebServiceClientApplicationContext可以通过用 注释的方法的名称获得@Bean

为方便起见,这里有更多JavaConfig 文档

于 2012-11-05T14:21:33.237 回答