0
我有一些与guice有关的经验,我只是尝试了guice-persist。但是现在我在非常简单的模块中遇到了一个非常奇怪的错误。 这是我的模块:createInjector上的奇怪错误“无法截取方法”
public class VotingModule extends AbstractModule {
@Override
protected void configure() {
bind(VotingService.class).to(VotingServiceImpl.class);
}
}
我创建了一个工厂(这是使用这个API,没有主),以获得服务的一个实例:
public static VotingService getService(final String persistenceUnit) {
// initialization of dependency injection
Injector i = Guice.createInjector(new JpaPersistModule(persistenceUnit), new VotingModule());
// Starts persistence stuff (jpa is ready now)
i.getInstance(PersistService.class).start();
return i.getInstance(VotingService.class);
}
的VotingService及其实现封装简单的数据库交互。对于这个“VotingServiceImpl”只注入一个EntityManager并在一些方法上使用@Transactionl。 那么,为什么我得到
1) Unable to method intercept: com.prodyna.nabucco.groupware.voting.core.service.impl.VotingServiceImpl
at com.prodyna.nabucco.groupware.voting.core.service.impl.VotingModule.configure(VotingModule.java:10)
? 错误是扔在这个简单的测试:如果绑定实现使用@Transactional只发生
@Test
public void test(){
VotingService vs = VotingServiceFactory.getService();
}
编辑 此错误。所以,一些东西出了问题,但如何解决它? 编辑
+1上使用私人构造函数 – jwells131313
你说得对,这似乎没有在文档中提到。尽管如此,Guice会生成一个类的子类,所以它必须能够调用超类的构造函数。如果构造函数是包私有的,并且具有单元可测试的优点,那么不会有任何问题。 –
我在单元测试中使用guice(jukito)。所以我不需要那里的构造函数。但thx暗示打包私人。 – dermoritz