Spring註解方式無法掃描Service註解的解決

Spring註解方式無法掃描Service註解

場景描述

系統啟動沒有任何錯誤,但是單獨訪問controller就會報錯,原因是做瞭service註入。貼兩張圖吧

  • 1.分析: 找不到bean的原因就是service註解沒有被掃描到spring中生成bean
  • 2.嘗試:手動將service在spring的文件中進行配置,啟動正常,訪問也正常,更證明瞭第一點的分析結果。
  • 3.查資料,大致查詢瞭很多spring+springmvc+hibernate的框架搭建,核對我的配置(粗心),jar包等,其實都沒錯,貼一些我覺得寫得比較明白清楚的文章大傢可以參考,重復寫相同的東西價值不大。
    • 這個是註解掃描沖突的說明
    • 這個是ssh整合的例子
  • 4.繼續查詢資料:我在開源中國查到一篇文章,和我的情況比較類似,但是樓主沒有說明具體的解決情況,隻是說瞭一句是配置文件問題,我想我的配置文件都能正常啟動,理論上不應該存在問題才對,無奈下,再次返回檢查配置文件,由於springmvc的掃描是生效瞭的,所以我就檢查我的spring-context.xml文件, 兩個文件都是最簡單的配置,所以沒貼,最後貼一下我報錯的地方;
  • 5.反思一下,還是個人太粗心,spring框架已經最新到5版本瞭,所以不存在說配置無法掃描的情況,出現問題就應該是文件沒對,各位共勉!

spring配置不掃描service層的原因

我將contoller給springmvc進行掃描,然後其餘所有交給spring掃描

這是spring的配置圖
這是springmvc的配置圖

然後發現service層的EmployeeService並沒有掃描到出現以下問題

這是service類

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘springmvc.crud.service.EmployeeService’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1493)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
… 39 more

最終發現原因是spring配置文件裡面context:exclude-filter是不要加use-default-filters的,而context:include-filter是需要加的
找瞭好久問題!!!

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: