ich bin Guice Verwendung aus einer Konfigurationsdatei, eine Klasse mit einigen Argumenten zu initialisierenGuice FactoryModuleBuilder eine Instanz mit Konstruktorparameter
@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"));
}
Diese Klasse in eine andere Klasse eingespritzt wird, die Singletons als gut.
class A{
@Inject private RetryServiceCaller retryServiceCaller;
}
Aber jetzt das Problem ist, dass, da diese neue Klasse A Singleton ist, muss ich die retryServiceCaller jedes Mal klonen, dass jemand diese Klasse A. verwenden
Ive FactoryModuleBuilder untersucht, es zu benutzen und Erstellen Sie eine Factory für diese Klasse. Aber da die Klasse Parameter aus der Konfigurationsdatei hat, konnte ich den Weg nicht finden, der es funktioniert.
So etwas wie dieses
class A{
@Inject private RetryServiceCaller.Factory retryServiceCallerFactory;
}
Da ist in meinem RetryServiceCaller implementieren diese
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;
}
Aber guice mir Fehler auswerfen sagen
No implementation for com.proxy.handlers.RetryServiceCaller$Factory was bound