解決SpringBoot掃描不到公共類的實體問題
SpringBoot掃描不到公共類的實體
我的項目結構是
parent
ademo
bdemo
parent是一個大項目,項目里面有web、service和entity三個子項目 ademo 依賴于bdemo里面的實體。
aProject項目的包結構是com.test.ademo
bProject項目的包結構是com.test.bdemo
以下的問題是我沒有忘記標注@Component、@Service等容器注解
在ademo項目里面使用@Autowired的時候有異常說是可能會Autowired失敗,但是編譯沒有問題,我就直接run項目,執(zhí)行結果是報空指針異常,說明對象確實自動導入失敗了。經過很多查閱后發(fā)現只需要將兩個項目的包名改成一樣的就可以,或者使用@ComponentScan在啟動類上面加入ademo和bdemo的包名即可
1、將ademo和bdemo的包名改成com.test.project
2、在ademo的啟動類上面加上@ComponentScan({“com.example.ademo”,“com.example.bdemo”})
在執(zhí)行第二點的時候注意就是如果在啟動類上面標注了@ComponentScan就會使會使@SpringBootApplication注解中包含的@ComponentScan注解(即默認的掃描包的位置)失效
具體原因:
因為啟動類上面的@SpringBootApplication里面默認包含了一個@ComponentScan注解,這個注解默認情況下是掃描該類所屬包下面的所有類,包含子目錄中的類。
因為所有網上的注解都是上面那樣的所以我就去想著是不是打包的時候將bdemo的項目跟ademo可結合在了一起所以拿不到com.test.ademo包下的文件,但是拿mvn打包后發(fā)現并不是。哈哈
下面是將ademo打包了的結構
代碼證明如果加上
@ComponentScan({“com.example.ademo”,“com.example.bdemo”})
是可以掃描到UserService類的,如果不加是獲取不到的,應該跟SpringBoot底層加載類是相關的,大家有興趣可以去看一下底層,在底層的我就不再這里講了,自己去看吧。
springboot打包,找不到pojo實體類
修改spring-boot-maven-plugin組件
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
SpringBoot整合MyBatis四種常用的分頁方式(詳細總結)
這篇文章詳細給大家總結了SpringBoot整合MyBatis四種常用的分頁方式,文中通過代碼示例為大家介紹的非常詳細,需要的朋友可以參考下2023-07-07mybatis-config.xml文件中的mappers標簽使用
在MyBatis配置中,<mapper>標簽關鍵用于指定SQL?Mapper的XML文件路徑,主要有三種指定方式:resource、url和class,Resource方式從類的根路徑開始,適合放在項目內部保障移植性,URL方式指定絕對路徑,移植性差,適用于外部路徑2024-10-10