Java Guice 命名绑定与其他模块提供的对象
Java Guice Named Bindings with Objects provided from other modules
这是我当前的设置
Class 文件
public class ToyAdapter {
private final ToyClient toyClient;
private final Retryer retryer;
@Inject
public APIAdapter(final ToyClient toyClient,
@Named("toyRetryer") final Retryer retryer) {
this.toyClient = toyClient;
this.retryer = retryer;
}
向导文件
我有几个 guice 模块,但这个属于上述 class
public class ToyModule extends AbstractModule {
@Override
protected void configure() {
bind(ToyAdapter.class).in(Singleton.class);
bind(Retryer.class).annotatedWith(Names.named("toyRetryer")).toInstance(getToyRetryer());
}
@Provides
@Singleton
public ToyClient getToyClient(...){
...
}
private Retryer getToyRetryer() {#Takes no arguments
return RetryerBuilder...build();
}
}
到目前为止效果很好!但是,现在我的重试器需要另一个模块中提供的 LogPublisher 对象。
我在努力
public class ToyModule extends AbstractModule {
LogPublisher logPublisher;
@Override
protected void configure() {
requestInjection(logPublisher);
bind(ToyAdapter.class).in(Singleton.class);
bind(Retryer.class).annotatedWith(Names.named("toyRetryer")).toInstance(getToyRetryer());
}
private Retryer getToyRetryer() {
return RetryerBuilder.withLogPublisher(logPublisher).build();
}
}
LogPublisher 在另一个 guice 模块中提供,该模块有很多其他对象依赖于 LogPublisher,所以我不想将所有内容合并到一个巨大的 guice 模块中。
@Provides
@Singleton
public LogPublisher getLogPublisher() {...}
这是执行此操作的正确方法吗?我收到 Java findBugs 错误说 unwritten field
所以我想我做错了。
在 @Provides
/@Named
注释的帮助下声明您的 Retryer
。
@Provides
@Singleton
@Named("toyRetryer")
public Retryer getToyRetryer(LogPublisher logPublisher) {
return RetryerBuilder.withLogPublisher(logPublisher).build();
}
这是我当前的设置
Class 文件
public class ToyAdapter {
private final ToyClient toyClient;
private final Retryer retryer;
@Inject
public APIAdapter(final ToyClient toyClient,
@Named("toyRetryer") final Retryer retryer) {
this.toyClient = toyClient;
this.retryer = retryer;
}
向导文件
我有几个 guice 模块,但这个属于上述 class
public class ToyModule extends AbstractModule {
@Override
protected void configure() {
bind(ToyAdapter.class).in(Singleton.class);
bind(Retryer.class).annotatedWith(Names.named("toyRetryer")).toInstance(getToyRetryer());
}
@Provides
@Singleton
public ToyClient getToyClient(...){
...
}
private Retryer getToyRetryer() {#Takes no arguments
return RetryerBuilder...build();
}
}
到目前为止效果很好!但是,现在我的重试器需要另一个模块中提供的 LogPublisher 对象。
我在努力
public class ToyModule extends AbstractModule {
LogPublisher logPublisher;
@Override
protected void configure() {
requestInjection(logPublisher);
bind(ToyAdapter.class).in(Singleton.class);
bind(Retryer.class).annotatedWith(Names.named("toyRetryer")).toInstance(getToyRetryer());
}
private Retryer getToyRetryer() {
return RetryerBuilder.withLogPublisher(logPublisher).build();
}
}
LogPublisher 在另一个 guice 模块中提供,该模块有很多其他对象依赖于 LogPublisher,所以我不想将所有内容合并到一个巨大的 guice 模块中。
@Provides
@Singleton
public LogPublisher getLogPublisher() {...}
这是执行此操作的正确方法吗?我收到 Java findBugs 错误说 unwritten field
所以我想我做错了。
在 @Provides
/@Named
注释的帮助下声明您的 Retryer
。
@Provides
@Singleton
@Named("toyRetryer")
public Retryer getToyRetryer(LogPublisher logPublisher) {
return RetryerBuilder.withLogPublisher(logPublisher).build();
}