一个线程内的Guice注入器

时间:2013-02-11 08:28:42

标签: java dependency-injection guice

我怀疑使用Guice。我有一个我称之为Main的类,它是使用Guice注入的构造函数,以及每次调用时创建类AppThread的o线程对象的方法。 AppThreadMain内的私有类。问题是在线程执行中我想创建类ClassX的对象。该对象是使用Guice注入的构造函数。我不知道注入ClassX对象的最佳形式是什么。我的第一个解决方案是在Injector内注入Main,并在线程内使用注入器来注入类ClassX的对象。

是否存在一种更清晰的方法来在线程中注入依赖?

由于

1 个答案:

答案 0 :(得分:4)

您应该编写&#34;线程代码&#34;而不是拥有自己的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 ...
    }
}