2 回答

TA貢獻1891條經(jīng)驗 獲得超3個贊
基本上你的問題是你試圖將一個接口綁定到一個單例而不提供任何實現(xiàn)。然后在你的“答案”中,你實際上做得更好:你提供了一個帶有實現(xiàn)的接口,然后你說你的實現(xiàn)是一個單例。但是,您實際上并沒有使 成為UserDAO一個有效的單例,因為您為每個UserService.
請嘗試以下操作:
ApplicationModule.java
public class ApplicationModule extends AbstractModule {
@Override protected void configure() {
bind(UserDAO.class) // Define UserDAO
.to(UserDAOImpl.class) // as implemented by UserDAOImpl
.in(Singleton.class); // and make it a singleton.
}
}
UserService.java
public class UserService {
private final UserDAO userDAO;
@Inject UserService(UserDAO userDAO) { // Actually inject your UserDAO!!
this.userDAO = userDAO;
}
}
Main.java
public class Main {
public static void main(String[] args) {
Injector injector = Guice.createInjector(new ApplicationModule());
UserService userService = injector.getInstance(UserService.class);
}
}

TA貢獻1786條經(jīng)驗 獲得超13個贊
我發(fā)現(xiàn)了一些東西...
如果我將 ApplicationModule 更改為:
public class ApplicationModule extends AbstractModule {
@Override
protected void configure() {
bind(UserDAO.class).to(UserDAOImpl.class);
bind(UserDAOImpl.class).in(Singleton.class);
}
}
這不能解決問題......我的 UserDAO 仍然沒有被注入,但我可以用Guice.createInjector(new ApplicationModule()). 所以在 UserService 構造函數(shù)上,我可以做這樣的事情:
public UserService() {
Injector injector = Guice.createInjector(new ApplicationModule());
injector.injectMembers(this);
}
添加回答
舉報