0

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

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

1 回答 1

0

我使用ProviderGoogle Guice 中的实现解决了这个问题。这是一个示例

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());

}

}

于 2016-08-10T19:50:47.173 回答