1. 場景描述
啟動的時候報”springboot available: expected at least 1 bean which qualifies as autowire candidate“。
2. 解決方案
該錯誤一眼看過去,簡單說就是bean無效,無法注入,使用的@Autowired或者@Resource注入bean有問題。
才想起來昨天從其他地方新加入一個mapper文件,為了區分現在的mapper,就單獨放到一個文件夾里了。
2.1 問題定位
(1)首先確認新建文件夾是否啟動類Application在同級或者下級目錄,檢查后發現在,那為什么沒有加載?
(2)然后檢查了啟動類上的標簽:@SpringBootApplication
看了下@SpringBootApplication源碼,其中@ComponentScan就是掃描注解,默認是掃描當前類下的package。將@Controller/@Service/@Component/@Repository等注解加載到IOC容器中。
但是我們使用的mybatis-genarator自動生成的Mapper和mapper.xml,是沒有用@Repository標簽,我們使用的mapperLocations的方式指定包加載進來的,所以說新加的文件夾是里面的mapper文件是不會自動加入到IOC容器的。
2.2 問題解決
在啟動類上新增標簽@MapperScan("com.laowang.newmapper")或者使用mapperLocations,將新的mapper文件夾加入進來就會自動掃描到IOC中了。