2016-07-17 10 views
0

フェイスターゲットをguiceにバインドする方法はありますか? 次のように私のユースケースの場合は、次のとおりです。フェイスターゲットをguiceにバインドする

  1. 私はどちらかと同じJVMでまたは別のサービスとして起動できるサービスを、持っています。
  2. サービスが同じJVMで起動されている場合は、Guiceを使用してサービスをバインドします。
  3. サービスがjvmの外で起動されている場合、私はfiegnを使用してサービスをバインドし、guiceに同じものを注入させたいと思います。

答えて

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

} 

}

あります
関連する問題