我对 guice 有一些经验,我只是尝试了 guice-persist。但是现在我在非常简单的模块中遇到了一个非常奇怪的错误。这是我的模块:
public class VotingModule extends AbstractModule {
@Override
protected void configure() {
bind(VotingService.class).to(VotingServiceImpl.class);
}
}
我创建了一个工厂(这是为了使用这个 api,没有 main)来获取服务的实例:
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)
? 在这个简单的测试中会抛出错误:
@Test
public void test(){
VotingService vs = VotingServiceFactory.getService();
}
编辑 仅当绑定实现使用@Transactional 时才会发生此错误。所以aop的东西出了点问题,但是如何解决呢? 编辑