【问题标题】:Replace Http RestTemplate using Guicier injection [Dropwizard]使用 Guicier 注入替换 Http RestTemplate [Dropwizard]
【发布时间】:2017-02-15 18:15:19
【问题描述】:

我们正在开发一个下拉向导应用程序并使用 Guice 进行注射。
我有以下 http 调用,我正在实例化 http 客户端和 rest 模板。相反,我正在寻找 Guice 注入这些对象的方法。我该怎么做?

RestTemplate restTemplate = new RestTemplate();
        HttpHeaders headers = new HttpHeaders();
        HttpEntity request;
        headers.set("Accept", MEDIA_TYPE);
        request = new HttpEntity(jsonContent, headers);

    return restTemplate.exchange(url, httpMethod, request, String.class);

【问题讨论】:

    标签: java inversion-of-control guice dropwizard inject


    【解决方案1】:

    理想情况下,您应该为经常创建的对象创建工厂,并将工厂作为依赖项注入。对于单元测试,您可以模拟工厂的输出并完全控制代码流。

    但是如果你想注入RestTemplate作为一个直接依赖,那么你可以写一个这样的模块:

    public MyModule extends AbstractModule {
        @Override
        public void configure() {
        }
    
        @Provides
        public RestTemplate providesRestTemplate() {
            return new RestTemplate();
        }
    }
    

    或者像这样:

    public MyModule extends AbstractModule {
        @Override
        public void configure() {
            bind(RestTemplate.class);
        }
    }
    

    第一个示例使用我个人更喜欢的 Guice @Provides 注释。第二个使用直接绑定到具体类。两者都实现了相同的结果,您可以将依赖项注入到一个类中,如下所示。

    public MyClass {
        private final RestTemplate restTemplate;
    
        @Inject
        public MyClass(RestTemplate restTemplate) {
            this.restTemplate = restTemplate;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      相关资源
      最近更新 更多