spring Boot項目遇到的一個小問題學習到repeatable annotations

維護項目很長時間,導致很久沒敲代碼了,昨天創建一個小項目,被一個小問題坑了。

說起來也是第一次用spring boot,照着官網例子,分分鐘就搞定了demo。然後往裏面添東西,寫了個測試接口,運行項目,訪問接口。竟然不能訪問!仔細看了下啓動日誌,發現@controller的類沒有被加載到spring。仔細看,沒發現哪裏寫錯了。還一直以爲編譯問題,所以clean了再編譯,再運行,然後就下班了,有事情就走了。今天上午仔細看了下項目,把controller的類放到Application的同級目錄,發現可以加載到了。突然意識到問題在於包名上。

spring boot的啓動類Application默認掃描的就是在Application類所在包以下的所有類,比如Application所在包爲com.xxx,那麼掃描的包就是com.xxx.*的所有包下面的類。

當然,我肯定不會願意妥協,幹嘛包名還得這麼固定,肯定有方式做到和常規spring項目一樣,根據表達式來管理掃描的包。也懶得上網搜,直接使用IDE的自帶提示功能找,找到@ComponentScan註解,同時看到@ComponentScans註解,那麼既然有帶s的,是不是這個支持的比不帶s的範圍廣呢。仔細看了下註解的源碼。發現跟我想的不一樣,

沒看明白,然後百度了一下,原來是java8的特性,註解可以重複使用。

官方文檔地址如下:

https://docs.oracle.com/javase/tutorial/java/annotations/repeating.html

於是可以有如下用法

@ComponentScan("com.xxx1")

@ComponentScan("abc.xxx")

public xxx   xxxx(){ xxxxx}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章