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

Spring 整合 MyBatis:Dao 注入失敗 NoSuchBeanDefinitionException 排查

     編輯:程式設計疑難解答

錯誤堆疊

org.springframework.beans.factory.NoSuchBeanDefinitionException: 
No qualifying bean of type [pers.zww.grad.dao.IAdminDao] found for dependency

常見原因檢查清單

  1. Mapper 掃描包路徑是否正確:
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="pers.zww.grad.dao" /> <!-- 確認此路徑包含 IAdminDao -->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
    </bean>
  2. Component Scan 是否涵蓋 Service 層:
    <context:component-scan base-package="pers.zww.grad.service" /> <-- 確保掃描到 AdminServiceImpl -->
  3. 介面上是否有 @Repository:已加 @Repository("adminDao"),正確。
  4. Mapper XML 命名空間與介面全限定名一致:
    <mapper namespace="pers.zww.grad.dao.IAdminDao">
  5. SqlSessionFactory 的 mapperLocations 路徑:
    <property name="mapperLocations" value="classpath:pers/zww/grad/mapping/*.xml" />
    確認 XML 檔案實際位於該目錄。

快速驗證步驟

  1. 啟動專案觀察啟動日誌,搜尋 MapperScannerConfigurer 是否掃描到介面。
  2. 在 AdminServiceImpl 注入點加上 @Autowired(required=false) 暫時避免啟動失敗,然後在 Controller 端點檢查 adminDao 是否為 null。
  3. 若使用 Spring Boot,改用 @MapperScan("pers.zww.grad.dao") 簡化配置。

最佳實踐

  • 統一使用 @Mapper 註解在 Mapper 介面上,免 XML 命名空間錯誤。
  • 採用 Spring Boot 專案結構,依賴自動配置減少 XML 配置。
  • 啟動測試注入:ApplicationContext.getBean(IAdminDao.class) 驗證 Bean 存在。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved