首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Struts2 註冊報 500 空指針異常:Service 層未實例化 DAO 導致

     編輯:程式設計綜合問答

異常堆棧關鍵行:

java.lang.NullPointerException
at slzhao.db.DBService.register(DBService.java:47)
at slzhao.action.RegisterAction.execute(RegisterAction.java:27)

根因分析

DBService.register() 內部調用 dao.save() 時 dao 為 null。典型原因:

  • Action 中手動 new DBService(),而非 Spring 注入,導致 Service 內部的 DAO 依賴未注入。
  • Service 類未加 @Service,或 XML 未配置 <bean>。
  • DAO 接口未實現、或實現類未掃描到。

修正方案

  1. Action 使用 Spring 注入 Service:
    @Autowired private DBService dbService; 而非 new DBService()。
  2. Service 注入 DAO:
    @Autowired private UserDAO userDAO;。
  3. 確保組件掃描路徑正確:
    <context:component-scan base-package="slzhao" />。

最佳實踐

  • 分層架構:Action → Service → DAO,每層只依賴下層接口。
  • 統一由 Spring 容器管理 Bean 生命周期,杜絕手動 new 核心業務類。
  • 開啟 struts.devMode=true 開發期獲取詳細異常堆棧。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved