由Lombok的@AllArgsConstructor注解引發(fā)的錯(cuò)誤
需求:在Service實(shí)現(xiàn)中寫了一個(gè)方法調(diào)用第三方接口同步數(shù)據(jù)。 功能代碼不做展示,比較普通的調(diào)用接口返回JSON數(shù)據(jù)。
直接看SpringBoot啟動(dòng)的報(bào)錯(cuò)信息:
Parameter 3 of constructor in org.springblade.modules.system.service.impl.UserServiceImpl required a bean of type 'java.lang.String' that could not be found.
在附一張圖:
看了許多文章都是在說調(diào)用了多余的@Autowired
也可以說就是這個(gè)原因,但是我在Controller類中去掉沒有任何的效果。發(fā)現(xiàn)在Controller層確實(shí)也都沒有用@Autowired注解。
這時(shí)候在Service實(shí)現(xiàn)類頂部發(fā)現(xiàn)了:@AllArgsConstructor
查了資料這里簡(jiǎn)單解釋一下
全部參數(shù)的構(gòu)造函數(shù)的自動(dòng)生成,該注解的作用域也是只有在實(shí)體類上,參數(shù)的順序與屬性定義的順序一致。
發(fā)現(xiàn)其他的類也是這么寫的沒啥問題。是因?yàn)槲以谶@個(gè)類中加了@Value注解。將配置文件的屬性讀取出來。
按照上面注解的解釋
創(chuàng)造了一個(gè)全參的構(gòu)造器,將@Value修飾的變量作為構(gòu)造器入?yún)ⅲ瑢?dǎo)致報(bào)錯(cuò)
所以將@AllArgsConstructor刪除就好了。
簡(jiǎn)單記錄一下,希望能幫助到大家。如果有不對(duì)的地方還望各位大佬指正。在此感謝各位花時(shí)間觀看。
@AllArgsConstructor lombok注解踩坑記錄
這里記錄一下使用注意點(diǎn)
- @AllArgsConstructor 放在類上面,作用等同于一個(gè)全量的有參構(gòu)造;
- 但如果這個(gè)類有繼承其他類,其他類中的字段并不會(huì)出現(xiàn)在全量有參構(gòu)造中;
- 可能是我的版本太低或者其他問題,暫時(shí)沒找到為什么繼承類的參數(shù)沒有出現(xiàn)在構(gòu)造中。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持服務(wù)器之家。
原文鏈接:https://blog.csdn.net/qq_43040108/article/details/112388353