我必须从 EnvironmentModule 触发 WitcherDriver.startPoller() ,因为EnvironmentModule是从Abstractmodule扩展而来的不知道如何在 EnvironmentModule 内部注入依赖关系,甚至有可能吗?如果不是,如何从 EnvironmentModule
触发 WitcherDriver.startPoller()@Log4j2
@AllArgsConstructor(onConstructor = @__(@Inject))
public class WitcherDriver {
private ClientTrafficCalculator clientTrafficCalculator;
private TaskAllocator taskAllocator;
@SneakyThrows
public void startPoller() {
new Thread(ProxyFleetManager::collectProxyIps).start();
new Thread(clientTrafficCalculator::prepareRateLimiterForAllClients).start();
new Thread(taskAllocator::processPendingRecordsInDDB).start();
log.info("All threads are started");
}
}
环境模块
@Log4j2
@AllArgsConstructor(onConstructor = @__(@Inject))
public class EnvironmentModule extends AbstractModule {
private WitcherDriver witcherDriver;
@SneakyThrows
public EnvironmentModule(final String[] args) {
marketplace = System.getProperty("realm", "USTest");
final String realm = getPropOrDefault("realm", "USTest");
final String root = getPropOrDefault("root", ".");
AppConfig.initialize(SERVICE_NAME, null, appConfigArgs);
witcherDriver.startPoller();
}
@Override
public void configure() {
install(new TomcatContainerModule(new ServiceModule(Test)));
}
}
预期:
witcherDriver.startPoller();
//正常工作
当前结果
witcherDriver.startPoller();
//引发空指针异常,因为它没有被注入并且 witcherDriver 为空
答案 0 :(得分:0)
我想我找到了答案,我们可以做以下事情
@Log4j2
public class WitcherDriver extends AbstractModule {
@Override
public void configure() {
requestInjection(this);
}
@Inject
public void startPoller(ClientTrafficCalculator clientTrafficCalculator,
TaskAllocator taskAllocator, ProxyFleetManager proxyFleetManager) {
new Thread(proxyFleetManager::collectProxyIps).start();
new Thread(clientTrafficCalculator::prepareRateLimiterForAllClients).start();
new Thread(taskAllocator::processPendingRecordsInDDB).start();
log.info("All threads are started");
//ProxyFleetManager::collectProxyIps
}
}
我们必须安装它,安装将触发该方法
install(new WitcherDriver()); //trigger pollers for proxy and task allocation
谢谢 Jk