微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我的项目中有一个用于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配置进行装配?

最佳答案
我将使用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;
    }
}

这样,您应该在ApplicationContext中有3个MyWebServiceClient实例,这些实例可以通过@Bean注释的方法名称来使用.

为了方便起见,这里还有一些documentation to JavaConfig.

原文地址:https://www.jb51.cc/spring/531853.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐