В методе configure()
вашего модуля Guice свяжите класс как нетерпеливый синглтон.
protected void configure() {
bind(StaggeredScheduler.class).toProvider(StaggeredSchedulerProvider.class).asEagerSingleton();
}
И реализуйте Provider<StaggeredScheduler>
.Например:
public class StaggeredSchedulerProvider implements Provider<StaggeredScheduler> {
@Inject
public StaggeredSchedulerProvider(final Runnable artifactRefresherTask,
final long fixedInitialDelayInSecs,
final int maxRandomScheduledDelayInSecs,
final long schedulePeriodInSecs,
final long awaitTerminationInSecs) {
this.fixedInitialDelayInSecs = fixedInitialDelayInSecs;
this.maxRandomScheduledDelayInSecs = maxRandomScheduledDelayInSecs;
this.schedulePeriodInSecs = schedulePeriodInSecs;
this.artifactRefresherTask = artifactRefresherTask;
this.awaitTerminationInSecs = awaitTerminationInSecs;
}
public StaggeredScheduler get() {
new StaggeredScheduler(
"test", /* name of the scheduler.*/
StaggeredScheduler.ScheduleStrategy.FIXED_RATE, /* scheduler strategy to be used */
fixedInitialDelayInSecs,
maxRandomScheduledDelayInSecs,
schedulePeriodInSecs,
artifactRefresherTask,
true,
awaitTerminationInSecs);
}
}
Более быстрый и грязный хак это добавление в модуль Guice:
@BindingAnnotation
@Retention(RUNTIME)
private @interface PrivateBindingAnnotation {}
protected void configure() {
bind(StaggeredScheduler.class).annotatedWith(PrivateBindingAnnotation.class).to(StaggeredScheduler.class).asEagerSingleton();
}
@Provides
@Singleton
public StaggeredScheduler provideArtifactRefresherScheduler(
final Runnable artifactRefresherTask,
final long fixedInitialDelayInSecs,
final int maxRandomScheduledDelayInSecs,
final long schedulePeriodInSecs,
final long awaitTerminationInSecs) {
new StaggeredScheduler(
test" /* name of the scheduler.*/,
StaggeredScheduler.ScheduleStrategy.FIXED_RATE /* scheduler strategy to be used */,
fixedInitialDelayInSecs,
maxRandomScheduledDelayInSecs,
schedulePeriodInSecs,
artifactRefresherTask,
true,
awaitTerminationInSecs);
}
В любом случае вам нужно убедиться, что вы на самом делевозможность ввести необходимые значения в поставщик или метод @Provides
.