3

我对使用 Guice 有疑问。我有一个我调用的类,Main它是使用 Guice 注入的构造函数和一个方法,每次调用它都会创建一个 class 的线程对象AppThreadAppThread里面是私有类Main。问题是在线程的执行中我想创建一个类对象ClassX。该对象是使用 Guice 注入的构造函数。我不知道注入ClassX. 我的第一个解决方案是注入线程Injector内部Main和内部,使用注入器注入类的对象ClassX

是否存在一种更清洁的方法来在线程内注入依赖关系?

谢谢

4

1 回答 1

5

与其拥有自己的子类Thread(无论如何都不鼓励),不如将“线程代码”编写为实现Runnable. 你的Main类应该注入这个类(或者Provider<MyRunnable>如果你需要实例化未知数量的类,你可以实际注入一个)。然后你的Main班级可以创建一个new Thread(myRunnable),它应该很好地结合在一起。

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 ...
    }
}
于 2013-02-11T08:37:24.083 回答