- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 Guice 使用配置文件中的一些参数来初始化一个类
@Provides
@Singleton
RetryServiceCaller provideMaxRetryAttempts(@Named("config") JsonObject config) throws IOException {
JsonObject retryDetails = config.getJsonObject("retry_details");
return new RetryServiceCaller(retryDetails.getInteger("maxRetryAttempts"), retryDetails.getInteger("upperBoundary"), retryDetails.getInteger("lowerBoundary"),
retryDetails.getLong("multiplicationFactor"), retryDetails.getInteger("timeout"), retryDetails.getInteger("increaseTimeout"));
}
这个类被注入(inject)到另一个也是单例的类中。
class A{
@Inject private RetryServiceCaller retryServiceCaller;
}
但现在的问题是,由于这个新的类 A 是单例的,所以每次有人使用这个类 A 时,我都需要克隆 retryServiceCaller。
我一直在研究 FactoryModuleBuilder 以使用它并为此类创建一个工厂。但由于该类具有来自配置文件的参数,我找不到使其工作的方法。
类似这样的事情
class A{
@Inject private RetryServiceCaller.Factory retryServiceCallerFactory;
}
然后在我的 RetryServiceCaller 中实现这个
public interface Factory {
@Inject
RetryServiceCaller create();
}
@Inject
public RetryServiceCaller(int maxRetryAttempts, int upperBoundary, int lowerBoundary, long multiplicationFactor, int timeout, int incrementTimeout) {
this.maxRetryAttempts = maxRetryAttempts;
this.upperBoundary = upperBoundary;
this.lowerBoundary = lowerBoundary;
this.multiplicationFactor = multiplicationFactor;
this.timeout = timeout;
this.incrementTimeout = incrementTimeout;
}
但是 guice 给我错误说
No implementation for com.proxy.handlers.RetryServiceCaller$Factory was bound
最佳答案
Guice 可以自动提供零参数工厂:而不是注入(inject) Foo
,你可以随时注入(inject)Provider<Foo>
。这允许您调用 fooProvider.get()
随时随地创建实例。您不必绑定(bind)到 Provider
或使用 Provides
访问它的方法;你可以注入(inject)Foo
或Provider<Foo>
您是否使用 bind(...).to(...)
类型绑定(bind),a toProvider
绑定(bind),a toInstance
绑定(bind),a @Provides
方法,或其他任何东西,Guice 会调用 get
或返回内部 Provider
自动。
(返回的 Provider 也将遵循范围,因此您需要删除 @Singleton
范围才能获取多个实例,并且请注意 toInstance
绑定(bind)将始终返回相同的实例。)
这不是 FactoryModuleBuilder 的工作;仅当您需要在同一类型中混合注入(inject)和非注入(inject)构造函数参数时才使用 FactoryModuleBuilder。
完成的绑定(bind)应如下所示:
@Provides
/* NOT @Singleton */
RetryServiceCaller provideMaxRetryAttempts(@Named("config") JsonObject config) throws IOException {
JsonObject retryDetails = config.getJsonObject("retry_details");
return new RetryServiceCaller(retryDetails.getInteger("maxRetryAttempts"), retryDetails.getInteger("upperBoundary"), retryDetails.getInteger("lowerBoundary"),
retryDetails.getLong("multiplicationFactor"), retryDetails.getInteger("timeout"), retryDetails.getInteger("increaseTimeout"));
}
在你的类里面:
@Inject public YourCallerConsumer(Provider<RetryServiceCaller> callerProvider) {
this.callerProvider = callerProvider;
}
public void doAction() {
RetryServiceCaller newCaller = callerProvider.get();
// interact with caller
}
关于java - Guice FactoryModuleBuilder 一个带有构造函数参数的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36290073/
我正在使用 Guice 使用配置文件中的一些参数来初始化一个类 @Provides @Singleton RetryServiceCaller provideMaxRetryAttempts(@Nam
我正在使用 Guice 和 FactoryModuleBuilder。通常,只需定义一个工厂接口(interface)就足够了,Guice 会自动注入(inject)实现。 但是,我正在努力的部分是工
class TestClass { @Inject public TestClass(String arg1, @Assisted String arg2) { Sys
在我的应用程序中,我使用 FactoryModuleBuilder 来自动创建某个类的实例: new AbstractModule() { @Override protected void c
我正在尝试使用 Guice(这里是新手!!)来完成我的一个项目。 所以我有一个 interface Consumer{ } 我的实现是 class XMLConsumer implements
感谢迁移到 jersey 2,我需要从 guice 迁移到 HK2。对于我的一些依赖项,我有一个辅助注入(inject)方法,我无法在 HK2 中实现它。看起来应该通过 Custom Injectio
我读过 Google guice - multibinding + generics + assistedinject但它似乎没有回答我的具体情况。这是我所拥有的: 与 FactoryModuleBu
我是一个 guice 新手,试图弄清楚如何使用 FactoryModuleBuilder 在 guice 中实现辅助注入(inject)。我查阅了 guice java 文档以实现 FactoryMo
什么是 Spring Framework相当于FactoryModuleBuilder , @AssistedInject , 和 @Assisted在 Google Guice ?换句话说,使用 S
我是一名优秀的程序员,十分优秀!