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

Spring Bean 創建異常:Injection of resource dependencies failed 根因排查與解決

     編輯:Java 綜合教學

錯誤現象

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'userHandler': Injection of resource dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'userServiceImpl': Injection of resource dependencies failed;
nested exception is org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'userMapper' defined in file [...UserMapper.class]: 
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 
org.apache.ibatis.builder.BuilderException: Error parsing Mapper XML. Cause: java.lang.NullPointerException

異常鏈深度解讀

  1. userHandler 注入 userServiceImpl 失敗
  2. userServiceImpl 注入 userMapper 失敗
  3. userMapper 初始化失敗:MyBatis 解析 Mapper XML 時拋出 NPE**

根因定位:Mapper XML 缺少 namespace

MyBatis 要求每個 <mapper> 元素必須指定 namespace,且值為對應 Mapper 接口的全限定名。缺失或錯誤會導致 XMLMapperBuilder.configurationElement 空指針。

錯誤示例

<mapper>  <!-- 缺少 namespace! -->
    <select id="userLogin" ...> ... </select>
</mapper>

正確寫法

<mapper namespace="com.hyh.mapper.UserMapper">
    <select id="userLogin" parameterType="com.hyh.entity.User" resultType="com.hyh.entity.User">
        select * from userInfo where phone=#{phone} and accoundpwd=#{accountpwd}
    </select>
</mapper>

另一常見原因:Spring 掃描包配置缺失

確保 spring-mvc.xml 或 applicationContext.xml 中開啟了組件掃描,且 base-package 覆蓋了 Service、Mapper 所在包:

<context:component-scan base-package="com.hyh.action,com.hyh.service.impl" />

排查清單

  1. Mapper XML 是否有 namespace?是否與 Mapper 接口全限定名一致?
  2. XML 文件名是否與 Mapper 接口同名?是否放在對應資源目錄?
  3. Spring 掃描包配置是否覆蓋所有註解類?
  4. MyBatis mapperLocations 路徑是否正確?
  5. 關鍵字(如 select、resultType)拼寫是否正確?建議複製粘貼避免手寫錯誤。

總結

「Injection of resource dependencies failed」通常是鏈路式連鎖反應,需順著 Caused by 找到最底層根因。本案例中,Mapper XML 缺少 namespace 導致 MyBatis 解析 NPE 是核心原因。細節決定成敗,關鍵配置寧可複製勿手寫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved