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