当前位置: 首页 > 知识库问答 >
问题:

Thread内的Guice注射器

子车青青
2023-03-14

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

是否存在一种更干净的方法来将依赖注入线程内部?

谢谢

共有1个答案

洪开诚
2023-03-14

与其拥有自己的 Thread 子类(无论如何都不鼓励这样做),不如将“线程代码”编写为实现 Runnable 的常规对象。您的 Main 类应该注入此类(或者您实际上可以注入提供程序

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 ...
    }
}

 类似资料:
  • 我使用< code>Cucumber和< code>Guice作为DI。我遇到了以下问题:我有一个步骤,即 我让这个类作为测试运行它 有一个 由我的使用,我定义了cucumber.properties,我定义了还有一个包含方案的功能文件。现在一切都在工作。 不,我想使用其他MyService实现运行MyStep步骤(当然我不会重复MyStep的代码)我定义了一个具有新场景和新测试类的新功能文件 现

  • 我有一个Maven模块,我在其中定义了一些跨其他几个Maven模块共享的UTIL。在本模块中,我想创建一些单例: 然后我将我的界面绑定到: 假设我想使用另一个Maven模块(比如web服务)中的这个单例,我该如何实现呢?我找到的唯一方法是在util Maven模块中创建一个类,如: 或者,我可以在Guice教程中看到的静态main方法中创建注入器,并将实例保存在某个地方。 然后从我的Web服务中执

  • 我已经使用google-guice和辅助注射机制有一段时间了。因为我在scala,刚刚发现scala-guice,我也对使用它感兴趣。但是我对如何使用辅助注射感到困惑。没有使用辅助注射的例子。 因此,我的问题是:是否可以使用scala guice辅助注射,如果可以,请提供一个简单的例子? 此外,对于google-guice,我使用以下库:javax.inject.jar、guice-3.0.jar

  • 我更新了createInjector调用以包含我的JPAPersisteModule。。。 在我的持久化单元声明如下:

  • 问题内容: 我让Google Guice负责连接对象。但是,如何测试绑定是否运作良好? 例如,假设我们有一个具有依赖性的类。如何测试B是否正确注入? 注意,这里没有方法,我想断言不是。 问题答案: 对于任何复杂的Guice项目,您都应该添加测试以确保可以使用这些模块来创建您的类。在您的示例中,如果B是Guice无法弄清楚如何创建的类型,则Guice将无法创建A。如果不需要A来启动服务器,但是当服务

  • 基本上我的问题归结为如何让这个测试通过: 但也许我错过了重点:堆栈溢出会让你相信做我正在做的事情是一种罪过(介绍引用喷油器的工厂,当你要求他们制造产品时,他们只是转发给你),而我正在做的是接近服务定位器,这是一个糟糕的举动。但我看不出解决这个问题的方法。 我有一个名为“可视化”的接口,它有7个实现者。运行时,根据您的数据集,我们选择一组可视化工具来创建和呈现。对于有注入器字段的工厂,我只需添加一个