解決springboot報(bào)錯(cuò)找不到自動(dòng)注入的service問題
springboot報(bào)錯(cuò)找不到自動(dòng)注入的service
找了不少資料,最后發(fā)現(xiàn)是每個(gè)service接口(雖然已經(jīng)使用了@service注解)的實(shí)現(xiàn)類都需要加上@service注解。
如果是使用junit生成的測(cè)試類,發(fā)現(xiàn)無法自動(dòng)注入服務(wù)的話
在test啟動(dòng)類前加上
@RunWith(SpringRunner.class) @SpringBootTest @ComponentScan("com.XXX.service")
這是因?yàn)閠est包和啟動(dòng)類不在同一個(gè)包或子包下,無法自動(dòng)注入
Springboot Service不被識(shí)別
根據(jù)以往經(jīng)驗(yàn),在Mapper接口沒有添加注解的情況下,Service中自動(dòng)注入的Mapper都會(huì)報(bào)紅,這次沒有報(bào)紅就知道會(huì)出錯(cuò),然后測(cè)試的時(shí)候果不其然報(bào)錯(cuò)了。
之所以沒有報(bào)紅是因?yàn)閟ervice類沒有被識(shí)別,就是@Service沒有被掃描,所以應(yīng)該是掃描路徑出了問題。
具體原因
在Springboot的啟動(dòng)類上添加@ComponentScan
@SpringbootApplication是一個(gè)復(fù)合注解,它中包含了:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan這三個(gè)注解。
@ComponentScan是組件掃描注解,它默認(rèn)掃描的是當(dāng)前包及以下用來掃描@Controller @Service @Repository這類被標(biāo)記的類。
錯(cuò)誤原因:
我的分布式項(xiàng)目中,路徑如下:
xxx.xxx.modle
xxx.xxx.mapper
xxx.xxx.service
xxx.xxx.web
啟動(dòng)類在web目錄下,因此@ComponentScan默認(rèn)掃描路徑是xxx.xxx.web
因?yàn)閣eb與modle、mapper、service在同一級(jí)別下所以無法掃描到@Service注解。
解決方法
方法一
將啟動(dòng)類移動(dòng)到上一級(jí)目錄。
方法二
自己定義掃描路徑,寫法如下:
//注解寫法:三種方法效果類似,都是指定掃描路徑 @ComponentScan("xxx.xxx") @ComponentScan(value = "xxx.xxx") @ComponentScan(basePackages = "xxx.xxx")
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
學(xué)習(xí)Java的Date、Calendar日期操作
Java開發(fā)過程中避免不了日期相關(guān)操作,這篇文章總結(jié)了一些Date、Calendar的常用方法,需要的朋友可以參考下2015-07-07Java中Set集合轉(zhuǎn)為L(zhǎng)ist集合常見的兩種方式
List是Java中比較常用的集合類,指一系列存儲(chǔ)數(shù)據(jù)的接口和類,可以解決復(fù)雜的數(shù)據(jù)存儲(chǔ)問題,這篇文章主要給大家介紹了關(guān)于Java中Set集合轉(zhuǎn)為L(zhǎng)ist集合常見的兩種方式,需要的朋友可以參考下2023-12-12SpringCloud添加客戶端Eureka Client過程解析
這篇文章主要介紹了SpringCloud添加客戶端Eureka Client過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03SpringCloud用Zookeeper搭建配置中心的方法
本篇文章主要介紹了SpringCloud用Zookeeper搭建配置中心的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04SpringBoot_Cache自定義使用SimpleCacheManager方式
這篇文章主要介紹了SpringBoot_Cache自定義使用SimpleCacheManager方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Java實(shí)現(xiàn)將CSV轉(zhuǎn)為Excel的示例代碼
CSV(Comma?Separated?Values)文件是一種純文本文件,包含用逗號(hào)分隔的數(shù)據(jù),常用于將數(shù)據(jù)從一個(gè)應(yīng)用程序?qū)牖驅(qū)С龅搅硪粋€(gè)應(yīng)用程序。本文將利用Java實(shí)現(xiàn)CSV轉(zhuǎn)為Excel,感興趣的可以了解一下2022-03-03Java中BigInteger類的使用方法詳解(全網(wǎng)最新)
這篇文章主要介紹了Java中BigInteger類的使用方法詳解,常用最全系列,本章作為筆記使用,內(nèi)容比較全面,但常用的只有:構(gòu)造函數(shù),基本運(yùn)算以及compareTo(),intValue(),setBit(),testBit()方法,需要的朋友可以參考下2023-05-05java 下執(zhí)行mysql 批量插入的幾種方法及用時(shí)
java 下執(zhí)行mysql 批量插入的幾種方法及用時(shí),1000次插入方法的比較。2013-04-04解析Java中的隊(duì)列和用LinkedList集合模擬隊(duì)列的方法
這篇文章主要介紹了解析Java中的隊(duì)列和用LinkedList集合模擬隊(duì)列的方法,相關(guān)算法的實(shí)現(xiàn)也是ACM中的常見題目,需要的朋友可以參考下2015-08-08