關於component-scan中base-package包含通配符的問題探究


今天在配置Spring的component-scan時,發現了一個有趣的問題。就是在指定base-package時,如果使用了星號通配符*,有時會出現類掃描不到的情況。下面研究一下這個問題。

先介紹一下項目結構:
為了演示,我在java文件夾下創建名為controller的包,並在該包下創建了一個名為IndexController的類。如圖所示:

 


先來看正常情況:
在Spring配置文件中配置Component-Scan:
<context:component-scan base-package="controller" />
啟動項目,訪問localhost:8080/index.do,結果正常。

但,當我把component-scan配置成這樣時:
<context:component-scan base-package="controller.*" />
出現了404,說明Spring沒有掃描到我的Controller,所以無法處理我們的請求。

 

 


但,當我把component-scan配置成這樣時:
<context:component-scan base-package="controller.**" />
又一切正常了。

這是為啥呢,我們打個斷點看一下:
當base-package="controller"時,可見packageSearchPath為"classpath*:controller/**/*.class":
這里寫圖片描述

 

 


當base-package="controller.*"時,可見packageSearchPath為"classpath*:controller/*/**/*.class":

 
當base-package="controller.**"時,可見packageSearchPath為"classpath*:controller/**/**/*.class":

 綜上, 可以分析出,**匹配任意class文件和包,而*只能匹配包,因此無法掃描到包下的類,因此也就無法被Spring管理

 

版權聲明:本文為CSDN博主「陳夏明」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/u012325167/article/details/75388990


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM