如何将配置设置注入自动装配的spring bean?

时间:2012-11-05 12:46:54

标签: java spring configuration autowired

我的项目中有一个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配置来执行此操作?

1 个答案:

答案 0 :(得分: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;
    }
}

有了这个,您应该通过MyWebServiceClient注释的方法名称在ApplicationContext中提供3个@Bean个实例。

为方便起见,还有一些documentation to JavaConfig