GWT + Spring : javax.naming.NameNotFoundException: Name userDao is not bound in this Context

1 )開發一個CRM項目, SmartGwt + Hibernate + Spring

 

JDK 1.6

GWT1.7.1

SmartGwt 1.3

Hibernate 3.2

Spring 2.5

Tomcat 6.0

 

2) 由於SmartGwt datasource operationType 只有CRUD 4種,由於個人能力有限,未能能通過 Server DMI 自定義方法實現用戶登錄功能,因此使用GWT RPC 來實現(驗證+返回User實例+session 操作)。

 

3)  GWT1.7 使用 HostedMode + Jetty ,容器啓動正常,實例運行正常。

 

4) 部署到 Linux + Tomcat 環境下,Tomcat 啓動正常,但實例運行拋異常:

 

 

5) 開始以爲 Tomcat 有問題,檢查無誤。

 

6) 查找資料和論壇,沒有頭緒。

 

7) 根據提示來看,應該是 GWT RPC 實現類 UserServiceRPCServlet 中的 userDao 沒有注入。

 

代碼如下:

 

初看沒錯,因爲可以在 Jetty 中正常運行。隨便改成如下代碼:

 

 

再啓動 Tomcat ,運行實例,問題解決!!

 

後來再將 @Autowired 換成 @Autowired + @Qualifier("userDao") , 依然正常。

 

不知道原因爲何?

 

查找相關資料:

======================================================================

在java代碼中可以使用@Autowire或者@Resource註解方式進行裝配,這兩個註解的區別是:
@Autowire默認按照類型裝配,默認情況下它要求依賴對象必須存在如果允許爲null,可以設置它required屬性爲false,如果我們想使用按照名稱裝配,可以結合@Qualifier註解一起使用;


@Resource默認按照名稱裝配,當找不到與名稱匹配的bean纔會按照類型裝配,可以通過name屬性指定,如果沒有指定name屬性,當註解標註在字段上,即默認取字段的名稱作爲bean名稱尋找依賴對象,當註解標註在屬性的setter方法上,即默認取屬性名作爲bean名稱尋找依賴對象.

注意:如果沒有指定name屬性,並且按照默認的名稱仍然找不到依賴的對象時候,會回退到按照類型裝配,但一旦指定了name屬性,就只能按照名稱裝配了.

==========================================================

看不出與我遇到的問題是否有關。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了26 篇原創文章 · 獲贊 11 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章