2016-07-17 30 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()); 

} 

}