關(guān)于@ComponentScan注解的用法及作用說明
@ComponentScan的作用
@ComponentScan(param)
告訴Spring 哪個packages 的用注解標識的類 會被spring自動掃描并且裝入bean容器,param即用來指定掃描包的范圍。
此注解一般和@Configuration注解一起使用
指定Spring掃描注解的package。
如果沒有指定包,那么默認會掃描此配置類所在的package。
注:
@Configuration注解申明當(dāng)前類是一個配置類,相當(dāng)于xml配置文件。
@ComponentScan和@Configuration一起使用的原因就是基于Spring2.0中的注解配合xml配置文件的實現(xiàn)一樣,即在xml配置文件配置ComponentScan包掃描屬性。
例如:
如果類中用了@Controller,@Repository,@Service,@Component四大注解標識之一了,那么如果不加上@ComponentScan,Spring就不會自動掃描類上的四大注解中的任何一個,那么四大注解下的類就不會被Spring掃描到,更不會裝入Spring容器中,因此你配置的四大注解就失去了作用。
@ComponentScan注解在使用時的一些誤解與分析
1.心血來潮寫了幾行代碼,但是卻出現(xiàn)了一個spring框架的問題,是關(guān)于spring中自動注入的問題。
2.我當(dāng)時找了好久都沒有找到,后來發(fā)現(xiàn)了問題。
3.我的代碼結(jié)構(gòu)是SpringBoot多模塊結(jié)構(gòu)。
4.我有兩個模塊:mall_admin,mall_common,我的mall_admin和mall_common兩個模塊共同隸屬于mall_parent父模塊。
5.我的mall_admin模塊里面聲明了mall_common依賴,同時mall_admin模塊里面寫了運行類,mall_common為通用模塊,一般用作調(diào)用使用。
6.我的mall_admin的包結(jié)構(gòu)為cn.xhc.mall.mall_admin.*(*可以為controller,service,service.impl,config,dao等),同時我的運行類是在cn.xhc.mall.mall_admin包里面。
7.我的mall_common的包結(jié)構(gòu)為cn.xhc.mall.mall_common.*(*可以為config,utils,service,service.impl等)。
8.我在mall_admin里面的service層自動注入mall_common里面的service層的類,但是卻報注入失敗的錯誤。
9.我起初找了很久,并且還在啟動類上加上了@ComponentScan注解,并標記上了包名,但是還是找不到自動注入失敗的錯誤。
10.我一直以為是我的mall_common模塊里面service層的代碼寫錯誤,所以才導(dǎo)致自動注入不成功。
11.但是我找了好久,沒有發(fā)現(xiàn)錯誤的地方,這令我十分郁悶,我嘗試了許多方法,甚至嘗試使用@Import注解,但是還是沒有成功。
最后我終于發(fā)現(xiàn)了原因,其實我使用@ComponentScan注解并沒有什么問題,但是我的啟動類放在了錯誤的包下面,最開始我將我的啟動類放在了cn.xhc.mall.mall_admin下面,但是mall_common中的service放在了cn.xhc.mall.mall_common.service包中,所以我掃描不到mall_common中的@Service注解,因為自動掃描只會掃描啟動類同級或者啟動類下面的包中的spring注解,所以只能掃描到cn.xhc.mall.mall_admin同級或者下面的包中的spring注解,而我的mall_common中service是在cn.xhc.mall.mall_common中,所以掃描不到,不能注冊為spring中的bean對象,所以不能再mall_admin中的service中自動注入mall_common中的service。
最后我將啟動類放在cn.xhc.mall包下,并加上@ComponentScan注解,成功解決問題。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Fluent Mybatis實現(xiàn)環(huán)境隔離和租戶隔離
我們在實際的業(yè)務(wù)開發(fā)中,經(jīng)常會碰到環(huán)境邏輯隔離和租戶數(shù)據(jù)邏輯隔離的問題。本文就詳細的來介紹一下,感興趣的小伙伴們可以參考一下2021-08-08CodeGPT + IDEA + DeepSeek如何在IDEA中引入DeepS
文章介紹了如何在IDEA中使用CodeGPT和DeepSeek插件實現(xiàn)AI智能開發(fā),具體內(nèi)容包括安裝步驟、配置APIkey和參數(shù)設(shè)置等,本文通過圖文并茂的形式給大家介紹的非常詳細,感興趣的朋友一起看看吧2025-02-02解決java Graphics drawImage 無法顯示圖片的問題
這篇文章主要介紹了解決java Graphics drawImage 無法顯示圖片的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-11-11Java聊天室之實現(xiàn)運行服務(wù)器與等待客戶端連接
這篇文章主要為大家詳細介紹了Java簡易聊天室之實現(xiàn)運行服務(wù)器程序與等待客戶端程序連接功能,文中的示例代碼講解詳細,需要的可以了解一下2022-10-10SpringBoot+MyBatisPlus+MySQL8實現(xiàn)樹形結(jié)構(gòu)查詢
這篇文章主要為大家詳細介紹了SpringBoot+MyBatisPlus+MySQL8實現(xiàn)樹形結(jié)構(gòu)查詢,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-06-06