我怀疑使用Guice。我有一个我称之为Main
的类,它是使用Guice注入的构造函数,以及每次调用时创建类AppThread
的o线程对象的方法。 AppThread
是Main
内的私有类。问题是在线程执行中我想创建类ClassX
的对象。该对象是使用Guice注入的构造函数。我不知道注入ClassX
对象的最佳形式是什么。我的第一个解决方案是在Injector
内注入Main
,并在线程内使用注入器来注入类ClassX
的对象。
是否存在一种更清晰的方法来在线程中注入依赖?
由于
答案 0 :(得分:4)
您应该编写"线程代码"而不是拥有自己的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 ...
}
}