Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/392.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 螺纹内的Guice注入器_Java_Dependency Injection_Guice - Fatal编程技术网

Java 螺纹内的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的对象 是否有更干净的方法将

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

是否有更干净的方法将依赖项注入线程中


谢谢

不要拥有自己的
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){…}