2017-05-30 76 views
0

我正在嘗試爲我的應用程序使用測試數據庫。我正在使用MyBatis。 我在MyBatis配置文件中配置了2個環境。我在我的ResourceConfig子類中設置了屬性。爲什麼依賴項Injenct只能在球衣的資源類中運行

property("Env","development"); 

我能夠得到這個值I,E 發展在我的資源像休耕

@Context Application app;// this is instance variable 

System.out.println(app.getProperties().get("Env"));// this statement in resource method 

我有3層控制器(I,E資源類),行爲層和DAO和DMO映射器層。

但是上述2個在資源類中工作的語句在DAO類中不起作用。我得到一個NullPointerException在System.out.println

現在我必須在Resource中獲取環境並將它傳遞給更多圖層。有一個更好的方法嗎。

所有我想要的是選擇測試數據庫用於測試和開發數據庫開發

回答

2

最有可能的,因爲你只是想實例化DAO youself

@Path("boogers") 
class Resource { 
    Dao dao = new Dao() 
} 

這是行不通的。 Dao需要通過澤西島的注射系統。該資源因爲通過注射系統而工作。如果你想爲Dao做同樣的事情,那麼你需要注入它並讓它通過DI系統。這樣,系統將其注入資源

@Path("boogers") 
class Resource { 
    @Inject 
    Dao dao; 
} 

在這裏,你不要實例之前,與所需的依賴注入它,你讓DI系統創建它,並把它注射。要使其工作,您需要製作Dao注射劑。

class AppConfig extends ResourceConfig { 
    public AppConfig() { 
     register(new AbstractBinder() { 
      @Override 
      protected void configure() { 
       bindAsContract(Dao.class); 
      } 
     }); 
    } 
} 

在這裏,我們結合了Dao類的噴射系統,這樣,每當它看到,它就能抓住/創建它,並把它注射。

+0

感謝您分享您的學習和知識。這更幫助我瞭解DI。關於使用澤西島的HK2框架的DI文章也非常豐富和有益的感謝 –

相關問題