Guice - 如何在扩展抽象模块的 class 中注入依赖 - Java

Guice -How to inject dependency inside the class which is extending Abstract module - Java

我必须从 EnvironmentModule[= 触发 TestDriver.startPoller() 41=] 因为 EnvironmentModule 是从 Abstractmodule 扩展而来的,所以我不确定如何在 EnvironmentModule 中注入依赖项,这是否可能?如果不是,我如何从 EnvironmentModule 触发 TestDriver.startPoller()

@Log4j2
@AllArgsConstructor(onConstructor = @__(@Inject))
public class TestDriver {

    private ClientTrafficCalculator clientTrafficCalculator;
    private TaskAllocator taskAllocator;


    @SneakyThrows
    public void startPoller() {


        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 TestDriver testDriver;
    
    
        @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);

            TestDriver.startPoller(); 
    
        }

    @Override
    public void configure() {
        install(new TomcatContainerModule(new ServiceModule(Test)));
    }
}

预计:

TestDriver.startPoller(); // 这很好用

当前结果

TestDriver.startPoller(); // 抛出空指针异常,因为它没有被注入并且 TestDriver 为 null

我想我找到了答案,我们可以做如下的事情

@Log4j2
public class TestDriver extends AbstractModule {


    @Override
    public void configure() {
        requestInjection(this);
    }

    @Inject
    public void startPoller(ClientTrafficCalculator clientTrafficCalculator,
        TaskAllocator taskAllocator, PManager pManager) {

        new Thread(pManager::name).start();
      
    }


}

我们必须安装它,安装会触发该方法

install(new TestDriver()); //trigger pollers for proxy and task allocation

谢谢 Jk