錯誤信息
今天開發的過程中突然出現如下錯誤:
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.smilx.ipayment.dao.XkioskFileMapper' 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:1716) at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1272) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1226) at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640) ... 63 more
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'ipaymentCheckController': Unsatisfied dependency expressed through field 'XkioskFileMapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.smilx.ipayment.dao.SmilxXkioskFileMapper' 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.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:643) at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130)
以上錯誤信息大致意思是:No qualifying bean of type 'com.smilx.ipayment.dao.XkioskFileMapper' available 這個dao層的mapper 依賴注入失敗!
分析及解決辦法:
既然是注入失敗首先要檢查的就是掃描 Mapper 接口和容器管理配置,Dao層的路徑是否配置正確!
然后檢查是否有重名的Bean!
還有可能在@Service注解的類中直接使用Spring注入的對象,導致加@Service注解的類創建Bean不成功,如下
@Autowired private CommonPropertiesUtil util; @Autowired private CommonService commonService; String SECRET_SEX = util.getSecretSex()//直接使用的注入對象util; String SECRET_USER = util.getSecretUser();
把String SECRET_USER = util.getSecretUser()從類中移到方法中運行正常了!
在這里把自己遇到的問題和解決方案做個記錄備份,希望也能解決你的問題
還有其他情況歡迎評論討論!