提问者:小点点

Thread内的Guice注射器


我对使用Guice有疑问。我有一个名为< code>Main的类,它是使用Guice和一个方法注入的构造函数,每次调用该方法都会创建一个类< code>AppThread的o thread对象。< code>AppThread是< code>Main中的私有类。问题是,在线程的执行过程中,我想创建一个class ClassX的对象。此对象是使用Guice注入的构造函数。我不知道注入< code>ClassX的对象的最佳形式是什么。我的第一个解决方案是在< code>Main内部注入< code>Injector,并在线程内部使用注入器注入class < code > clasx 的对象。

是否存在一种更干净的方法来将依赖注入线程内部?

谢谢


共1个答案

匿名用户

与其拥有自己的 Thread 子类(无论如何都不鼓励这样做),不如将“线程代码”编写为实现 Runnable 的常规对象。您的 Main 类应该注入此类(或者您实际上可以注入提供程序

public class MyMainClass {
    @Inject
    MyMainClass(Provider<MyRunnable> runnableProvider) { ... }

    public void spawnThread() {
        new Thread(runnableProvider.get()).start();
    }
}

public class MyRunnable implements Runnable {
    @Inject
    MyRunnable(ClassX myX) { ... }
    public void run() {
        ... do work ...
    }
}