Spring Boot無法自動注入bean問題解決方案
阿新 • • 發佈:2018-12-27
前言:在使用Spring Boot+Mybatis時,寫完Mapper介面、Service、Controller後,啟動(圖1)打包專案(圖2)均失敗,提示無法自動注入bean。
完成目標:
1、無法自動注入bean錯誤資訊
2、程式碼展示
3、解決方案
一、錯誤資訊:
Description:Field userMapper in com.openplat.system.service.UserService required a bean of type 'com.openplat.system.mapper.UserMapper' that could not be found.Action:Consider defining a bean of type 'com.openplat.system.mapper.UserMapper' in your configuration.圖1
圖2
二、程式碼展示:
1、UserMapper.java
2、UserService.java
3、UserController.java
三、解決辦法:
根據英文的提示是在配置中找不到一個指定自動注入型別的bean,SpringBoot專案的Bean裝配預設規則是根據Application類所在的包位置從上往下掃描!Application類是指SpringBoot專案入口類。這個類的位置很關鍵: 如果Application類所在的包為:com.openplat,則只會掃描com.openplat包及其所有子包,如果mapper、service所在包不在com.openplat及其子包下,則不會被掃描。兩種解決辦法:即, 把Application類放到mapper、service所在包的上級,com.openplat.OpenPlatApplication
知道這一點非常關鍵,不知道Spring文件裡有沒有給出說明,如果不知道還真是無從解決。
1 .將介面與對應的實現類放在與application啟動類的同一個目錄或者他的子目錄下,這樣註解可以被掃描到,這是最省事的辦法
2 .在指定的application類上加上這麼一行註解,手動指定application類要掃描哪些包下的註解(圖3)
圖3
@ComponentScan(basePackages = "com.openplat.system.mapper.*")