1. 程式人生 > >Spring Boot無法自動注入bean問題解決方案

Spring Boot無法自動注入bean問題解決方案

前言:在使用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.*")


Spring Boot與Spring Cloud學習使用可參看筆者部落格