關於SpringBoot bean無法注入的問題(與檔案包位置有關)改變自動掃描的包

菜鳥快飛發表於2018-01-10
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'com.example.SpringBootJdbcDemoApplication.SpringBootJdbcDemoApplication': Unsatisfied dependency expressed through field 'userRepository': No qualifying bean of type [com.example.repositories.UserRepository] found for dependency [com.example.repositories.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.example.repositories.UserRepository] found for dependency [com.example.repositories.UserRepository]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}  
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:569)  
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)  

無法注入Dao中的Bean!
解決分析後來經研究發現,SpringBoot專案的Bean裝配預設規則是根據Application類所在的包位置從上往下掃描! “Application類”是指SpringBoot專案入口類。這個類的位置很關鍵:
如果Application類所在的包為:io.github.gefangshuai.app
,則只會掃描io.github.gefangshuai.app
包及其所有子包,如果service或dao所在包不在io.github.gefangshuai.app
及其子包下,則不會被掃描!

知道這一點非常關鍵,不知道Spring文件裡有沒有給出說明,如果不知道還真是無從解決。
轉:http://blog.csdn.net/gefangshuai/article/details/50328451,http://412887952-qq-com.iteye.com/blog/2292733
在開發中我們知道Spring Boot預設會掃描啟動類同包以及子包下的註解,那麼如何進行改變這種掃描包的方式呢,原理很簡單就是:@ComponentScan註解進行指定要掃描的包以及要掃描的類。

參考:http://blog.csdn.net/u014695188/article/details/52263903



作者:AiPuff
連結:https://www.jianshu.com/p/f8652ee6e2fa
來源:簡書
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。

相關文章