2016-07-17 5 views
0

guice에 대상을 바인딩하는 방법이 있습니까? 다음과 같이 내 유스 케이스의 경우는 다음과 같습니다guice에게 feign 대상을 묻습니다.

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

} 

}이다