有没有办法将假目标绑定到guice?我的用例如下:
- 我有一个服务,它可以在同一个 JVM 中启动,也可以作为单独的服务启动。
- 如果服务是在同一个 JVM 中启动的,那么我将使用 Guice 绑定它。
- 如果服务是在 jvm 之外启动的,我想使用 fiegn 绑定服务并让 guice 注入相同的内容。
有没有办法将假目标绑定到guice?我的用例如下:
我使用Provider
Google 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());
}
}