第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Google Guice 注入會員不工作

Google Guice 注入會員不工作

慕的地6264312 2021-07-12 16:14:41
我正在使用 GoogleGuice 作為 DI 創(chuàng)建一個新項目。所以我創(chuàng)建了一個我的 DAO 接口:public interface UserDAO extends DAO<User> {    // Some CRUD methods}和一個實現(xiàn):public class UserDAOImpl implements UserDAO {     // CRUD Methods implementation}這是我的 ApplicationModule 類:public class ApplicationModule extends AbstractModule {    @Override    protected void configure() {        // Tried swap the order without results        bind(UserDAO.class).in(Singleton.class);        bind(UserDAO.class).to(UserDAOImpl.class);    }}在我的 UserService 上,我嘗試這樣做:@Injectprivate UserDAO dao;但我的 dao 始終為空。而且,當我調用Guice.createInjector(new ApplicationModule())UserService 構造函數(shù)時,我得到了以下堆棧跟蹤:Servlet.service() for servlet [Jersey REST Service] in context with path [/simple-rest-application] threw exception [A MultiException has 2 exceptions.  They are:1. com.google.inject.CreationException: Unable to create injector, see the following errors:1) No implementation for br.com.brunots.training.simple_rest_application.dao.UserDAO was bound.  Did you mean?    br.com.brunots.training.simple_rest_application.dao.UserDAO bound  at br.com.brunots.training.simple_rest_application.guice.ApplicationModule.configure(ApplicationModule.java:15)  at br.com.brunots.training.simple_rest_application.guice.ApplicationModule.configure(ApplicationModule.java:14)2) A binding to br.com.brunots.training.simple_rest_application.dao.UserDAO was already configured at br.com.brunots.training.simple_rest_application.guice.ApplicationModule.configure(ApplicationModule.java:15).  at br.com.brunots.training.simple_rest_application.guice.ApplicationModule.configure(ApplicationModule.java:14)有人知道發(fā)生了什么嗎?我缺少什么?
查看完整描述

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);

  }

}


查看完整回答
反對 回復 2021-07-29
?
開滿天機

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);

}


查看完整回答
反對 回復 2021-07-29
  • 2 回答
  • 0 關注
  • 153 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號