我是Guice的新手并且已经对此做了很多阅读,但我没有取得任何成功。我基本上创建了一个DAO,并希望使用Guice和AssistedInjection。实际上,最终目标是在整个应用程序的其他类中创建Injected工厂。
在实际类中的预期用途,它将注入工厂然后从中获取类
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);
将工厂设为null。在阅读这个问题时,我开始相信注射不会像我在“测试”课中使用它那样起作用。它本身需要放入“注入”类。但这也不起作用 - 如果我将Factory注入包装在另一个类中然后尝试使用它,它就不起作用。
任何帮助将不胜感激......
答案 0 :(得分:2)
TestAllModelBootstrap
并非来自Injector-JUnit而是创建了它 - 所以Guice还没有机会注入它。 Guice只能通过getInstance
(以及递归的那些对象的依赖关系)或传递到injectMembers
的对象或使用requestInjection
请求的现有实例注入它创建的对象。
您可以手动获取工厂实例:
factory = injector.getInstance(DAOFactory.class);
或者让Guice使用injectMembers
注入您的会员:
injector.injectMembers(this); // sets the @Inject factory field
或者使用像Guiceberry这样的工具在您的应用中注入测试用例。