将假目标绑定到guice

时间:2016-07-17 10:32:45

标签: java guice netflix-feign feign

有没有办法将假装目标绑定到guice? 我的用例如下:

  1. 我有一个服务,可以在同一个JVM中启动,也可以作为单独的服务启动。
  2. 如果服务是在同一个JVM中启动的,那么我将使用Guice绑定它。
  3. 如果服务是在jvm之外启动的,我想使用fiegn绑定服务并让guice注入相同的内容。

1 个答案:

答案 0 :(得分:0)

我使用Google Guice中的Provider实现解决了这个问题。 这是一个样本

public class Main {

public static AccountService get() {
    return Feign.builder()
            .contract(new JAXRSContract())
            .decoder(new GsonDecoder())
            .target(AccountService.class, "http://localhost:9090");

}

static class RestClientProvider implements Provider<AccountService> {


    RestClientProvider() {
    }

    @Override
    public AccountService get() {
        return Main.get();
    }

}


static class AppInjector extends AbstractModule {
    @Override
    protected void configure() {
        Provider<AccountService> prov = new RestClientProvider();
        bind(AccountService.class).toProvider(prov);
    }
}

public static void main (String... args) {

    Injector inj = Guice.createInjector(new AppInjector());
    AccountService ac = inj.getInstance(AccountService.class);

    Account a = ac.getAccountByName("Mihir");
    System.out.println(a.getName());

}

}