出現問題,分析原因
今天拿出在做的項目,啓動運行,報錯:
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.liu.dao.UserInfoMapper] 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)}
打開Service層代碼,注入UserInfoMapper的代碼沒有異常,於是我腦海中想到可能是下面的幾個問題:
- spring-mybatis整合配置文件沒有掃描到
- 沒有掃描到mapper.xml文件
- mapper.java和mapper.xml之間沒有聯繫起來
- spring-mybatis整合配置文件中,配置的屬性值在properties文件中,但是該properties文件沒有掃描到或者是值錯誤(但是這個一般控制檯都會鎖定到屬性值錯誤,可能性不大)
解決問題
1、檢查spring-mybatis配置文件,在web.xml中已經配置掃描到了,謹慎起見還是檢查一下:
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:META-INF/config/spring/spring-mybatis.xml");
UserInfo bean = ac.getBean(UserInfo.class);
bean.getUserInfoById(10001L);
在service的初始化方法中,執行上述代碼,是沒有問題的,所以配置文件是掃描到了的,排除第一個原因
2、 檢查spring-mybatis配置文件
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:META-INF/config/mybatis/sqlmap.xml" />
<property name="mapperLocations"
value="classpath:com/liu/dao/mapping/*.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage"
value="com.liu.dao" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
沒有問題
3、檢查UserInfoMapper.java和UserInfoMapper.xml文件,發現UserInfoMapper.xml中對po的配置路徑是:
com.liu.po.com.liu.po.UserInfoMapper.java
所以問題出現在這裏,mapper之間沒有聯繫起來,導致注入失敗,這個問題的產生是上一次項目關閉前,手賤改了一下包路徑,IDEA卻給我重複了路徑。。