java - Guice FactoryBuilderModule 生成工厂时出现 NullPointerException

标签 java dependency-injection guice factory

我是 Guice 的新手,并且已经阅读了很多这方面的内容,但我还没有取得任何成功。我基本上正在创建一个 DAO,并想使用 Guice 和 AssistedInjection。实际上,最终目标是在整个应用程序的其他类中创建注入(inject)工厂。

预期在实际类中使用,该类将注入(inject)工厂,然后从中获取类

public class TestAllModelBootstrap {
   @Inject private DAOFactory factory;
   public TestAllModelBootstrap() {
   }

   @Test
   public void testGettingDAO() {
      Injector injector = Guice.createInjector(new HibernateDAOModule());
      Token oToken = new OperTokenV1();
      AccountingDAO accountingDAO = factory.create(oToken);
   }
}

这是基于基于 Guice 的代码:

public interface DAOFactory {
    public AccountingDAO create(Token oTicket);
}

具体类有一个带有注释的构造函数

@Inject
public HibernateAccountingDAO(@Assisted Token oTicket) {

    this.oTicket = oTicket;
}

以及实际的模块:

@Override
protected void configure() {
    install(new FactoryModuleBuilder()
            .implement(AccountingDAO.class, HibernateAccountingDAO.class)
            .build(DAOFactory.class));

    bind(SessionFactoryInterface.class)
            .toProvider(HibernateSessionProvider.class);
}

每次我尝试运行此命令时: java.lang.NullPointerException -> 表明:

factory.create(oToken);

工厂为空。在阅读这个问题时,我被引导相信注入(inject)不会像我在“测试”类中使用它那样工作。它需要放入“注入(inject)”类本身。但这也不起作用 - 如果我将 Factory 注入(inject)包装在另一个类中,然后尝试使用它,它也不起作用。

如有任何帮助,我们将不胜感激...

最佳答案

TestAllModelBootstrap 并非来自注入(inject)器 — JUnit 创建了它 — 因此 Guice 还没有机会注入(inject)它。 Guice 只能注入(inject)到它通过 getInstance 创建的对象(以及这些对象的依赖项,递归地),或者传递到 injectMembers 的对象中。 ,或根据要求使用 requestInjection 的现有实例.

您可以手动获取工厂实例:

factory = injector.getInstance(DAOFactory.class);

或者要求 Guice 使用 injectMembers 注入(inject)您的成员:

injector.injectMembers(this); // sets the @Inject factory field

或者使用像 Guiceberry 这样的工具在您的应用程序中注入(inject)测试用例。

关于java - Guice FactoryBuilderModule 生成工厂时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21591780/

相关文章:

c# - 如何在 JsonConverter 中注入(inject)/访问 HttpContext?

java - Guice:如何打印模块的绑定(bind)?

java - Guice - 没有绑定(bind)实现(对于 List<String>)

java - 如何将 Spring bean 注入(inject)到 Exception 中

Scala - 当依赖类也使用相同的泛型类型时,使用 guice 注入(inject)泛型类型

java - hibernate 与 EclipseLink

java - 方法的可见性及其成本

java - 不使用基于java的tasklet执行存储过程

java - eclipse有jsp查看模式吗?

java - 将bean注入(inject)到spring java配置类中