iT邦幫忙

0

有關Spring依賴注入的問題

  • 分享至 

  • xImage

我現在要在Controller寫一個新的方法,並且引入Service
但現在遇到一個困難
當我不下@Autowired註標時,我在執行程式Debug的時候
會發現Service那邊會直接跳過並且報錯NullPointer
後來才知道,Spring會在一開始啟動專案時會將要依賴注入的類給注入起來
但我現在又遇到一個困難
就是當我下了@Autowired註標
便會出現報錯
expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

畫面如下https://ithelp.ithome.com.tw/upload/images/20230314/20137810rDBtQnFDHH.jpg

後來去比對了其他支的Service及ServiceImpl
發現差別在於
別支Service實現層會再去Autowired其他Repository
https://ithelp.ithome.com.tw/upload/images/20230314/20137810jT0bpoSpxX.jpg

並且其他支也會在Repository import相對應的Bean操作資料庫增刪改查
https://ithelp.ithome.com.tw/upload/images/20230314/20137810MzDaohT0bm.jpg

但我這支方法押根就沒有要操作資料庫呀...
我一定要新增相對應的Repository嗎..
有沒有什麼方法能讓我匯入Service並且能正常調用方法呢
/images/emoticon/emoticon02.gif

我這樣講好像有點複雜,所以分Controller,Service,ServiceImpl及錯誤訊息給大家看

Controller
https://ithelp.ithome.com.tw/upload/images/20230314/20137810dZC2JYPYM8.jpg

Service
https://ithelp.ithome.com.tw/upload/images/20230314/20137810ObOt3v0PSm.jpg

ServiceImpl
https://ithelp.ithome.com.tw/upload/images/20230314/20137810n1Q4zOjJRt.jpg

錯誤訊息
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: public com.tradevan.pwsn.service.CommonService com.tradevan.pwsn.v2.web.auth.controller.HomeController.commonService; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.tradevan.pwsn.service.CommonService] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

0
JJYEN
iT邦新手 4 級 ‧ 2023-03-16 17:43:57

你Application class有加入@EnableScheduling嗎?

0
x70343
iT邦見習生 ‧ 2023-03-16 18:22:35

檢查一下@Value的設定有沒有問題,有可能宣告在上方的全域變數透過@Value取值時發生錯誤,導致@Service實例化失敗,另外我會建議你創建一個HomeService對應這一支HomeController,然後把CommonService放到BaseService去@Autowired,讓HomeService去繼承 BaseService

我要發表回答

立即登入回答