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掃描
然後發現service層的EmployeeService並沒有掃描到出現以下問題
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。
推薦閱讀:
- Spring整合Mybatis 掃描註解創建Bean報錯的解決方案
- Spring和SpringMVC掃描註解類沖突的解決方案
- 解決Spring JPA 使用@transaction註解時產生CGLIB代理沖突問題
- springboot 項目啟動後無日志輸出直接結束的解決
- SpringBoot項目報錯:"Error starting ApplicationContext…."解決辦法