首页 文章

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

提问于
浏览
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配置来执行此操作?

1 回答

  • 3

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

    更具体地说,我将使用JavaConfig创建 MyWebServiceClient 的多个实例,并使用正确的 endpoints 属性键使配置为 @Value 'd .

    像这样的东西:

    @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;
        }
    }
    

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

    为方便起见,这里有更多documentation to JavaConfig .

相关问题