Java 螺纹内的Guice注入器
我对使用Guice有疑问。我有一个调用Java 螺纹内的Guice注入器,java,dependency-injection,guice,Java,Dependency Injection,Guice,我对使用Guice有疑问。我有一个调用Main的类,它是使用Guice注入的构造函数,还有一个方法,每次调用它时都会创建一个类AppThread的o-thread对象AppThread是Main中的私有类。问题是,在线程的执行过程中,我想创建一个classClassX的对象。此对象是使用Guice注入的构造函数。我不知道注入ClassX对象的最佳形式是什么。我的第一个解决方案是在Main内部注入Injector,在线程内部使用Injector注入classClassX的对象 是否有更干净的方法将
Main
的类,它是使用Guice注入的构造函数,还有一个方法,每次调用它时都会创建一个类AppThread
的o-thread对象AppThread
是Main
中的私有类。问题是,在线程的执行过程中,我想创建一个classClassX
的对象。此对象是使用Guice注入的构造函数。我不知道注入ClassX
对象的最佳形式是什么。我的第一个解决方案是在Main
内部注入Injector
,在线程内部使用Injector注入classClassX
的对象
是否有更干净的方法将依赖项注入线程中
谢谢不要拥有自己的
Thread
子类(这是不鼓励的),您应该将“Thread code”编写为实现Runnable
的常规对象。你的Main
类应该注入这个类(如果你需要实例化一个未知数量的提供者,你也可以注入一个提供者)。然后,您的Main
类可以创建一个新线程(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 ...
}
}
公共类MyMainClass{
@注入
MyMainClass(提供程序runnableProvider){…}
公共无效线程(){
新线程(runnableProvider.get()).start();
}
}
公共类MyRunnable实现Runnable{
@注入
MyRunnable(ClassX myX){…}
公开募捐{
……工作。。。
}
}
同意,但问题是在Runnable
中创建ClassA
的实例。将Injector
注入Runnable
实例或使用更好的方法。是的,使用提供程序比注入注入器更好。Thanks@Andreas_D:如果可以,应尽量避免注射注射器。是的,有时您必须这样做,但通常您可以只插入一个提供者
,然后将其交给他人。我在这里使用的相同方法适用于许多情况。我想我误读了你的评论@Andreas_D。至于将ClassA注入runnable,你只需将其放入构造函数@InjectMyRunnable(ClassA injectedClassA){…}
。