Java 生成的工厂上的Guice FactoryBuilderModule NullPointerException
我是Guice的新手,在这方面做了很多阅读,但我没有在这方面取得任何成功。我基本上是在创建一个DAO,并希望使用Guice和AssistedInjection。实际上,最终目标是在整个应用程序的其他类中创建注入工厂 在实际类中的预期用途,该类将注入工厂,然后从工厂中获取类Java 生成的工厂上的Guice FactoryBuilderModule NullPointerException,java,dependency-injection,guice,factory,Java,Dependency Injection,Guice,Factory,我是Guice的新手,在这方面做了很多阅读,但我没有在这方面取得任何成功。我基本上是在创建一个DAO,并希望使用Guice和AssistedInjection。实际上,最终目标是在整个应用程序的其他类中创建注入工厂 在实际类中的预期用途,该类将注入工厂,然后从工厂中获取类 public class TestAllModelBootstrap { @Inject private DAOFactory factory; public TestAllModelBootstrap() {
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);
}
}
这基于以下基于GUI的代码:
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->表示:
创建(oToken)
将工厂设置为空。在阅读这个问题的过程中,我被引导相信注射不会像我在“测试”课上使用它那样起作用。它需要放在一个“注入”类中。但是这也不起作用——如果我在另一个类中包装工厂注入,然后尝试使用它,它就不起作用了
任何帮助都将不胜感激……TestAllModelBootstrap不是来自注入器JUnit创建的,因此Guice还没有机会注入它。Guice只能将其通过
getInstance
创建的对象(以及这些对象的依赖项,递归地)或传递到的对象或使用请求的现有实例中注入
您可以手动获取factory实例:
factory = injector.getInstance(DAOFactory.class);
或要求Guice使用以下方法注入您的成员:
或者使用类似于在应用程序中注入测试用例的工具。非常感谢-在我所有的搜索中,没有任何方法将“注入”与问题联系起来。这一点很清楚,使用factory=injector.getInstance(…)可以很好地获取工厂,而不必生成使用工厂Guice的类。
injector.injectMembers(this); // sets the @Inject factory field