关于SpringMVC+mybatis整合中Dao类注入的问题No qualifying bean of type

Asura· 2016-04-07 08:23:44
本人搭建springmvc+mybatis框架过程中,出现了一个问题,希望遇到问题的高手们指导下:
看过很多类似问题的解决办法都不管用,实在无奈..
首先是问题日志如下:
 
Servlet.service() for servlet [SpringMVC] in context with path [/SmartThemis] threw exception [Request processing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}] with root cause
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}

[org.springframework.context.support.ClassPathXmlApplicationContext] - Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}
四月 07, 2016 8:09:49 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [SpringMVC] in context with path [/SmartThemis] threw exception [Request processing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}] with root cause
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}



无法创建的deptcontroller在这里:




@Controller
public class DeptController {

@Resource
private IDeptService deptService;


@RequestMapping("/savedept.do")
public int saveDeptInfo(HttpServletRequest request,HttpServletResponse response){
String m = request.getParameter("m");
int i = 0;
if("saveDeptInfo".equals(m)){
ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:spring-mvc.xml");
Dept dept = (Dept) ac.getBean("dept");
dept.setDeptName(request.getParameter("deptName"));
dept.setCreatTime(request.getParameter("deptIntime"));
dept.setModifyTime(request.getParameter("deptModifyTime"));
System.out.println(dept.getId()+"................");
dept.setRemark(request.getParameter("deptRemark"));
i =deptService.saveDept(dept);

}
return i;
}
}


IdeptService接口

public interface IDeptService {

public int saveDept(Dept dept);
}


IdeptService实现类

@Service("deptService")
public class DeptServiceImpl implements IDeptService {

@Resource
private IDeptDao deptDao;

@Override
public int saveDept(Dept dept) {

return this.deptDao.insert(dept);
}
}


IDeptDao接口


public interface IDeptDao {
int selectByPrimaryKey(Integer deptid);

int insert(Dept record);
}


DeptMapper.xml


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://www.mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.dcits.dao.IDeptDao" >
<resultMap id="BaseResultMap" type="com.dcits.pojo.Dept" >
<id column="deptid" property="deptid" jdbcType="INTEGER" />
<result column="deptname" property="deptname" jdbcType="VARCHAR" />
<result column="createtime" property="createtime" jdbcType="VARCHAR" />
<result column="modifytime" property="modifytime" jdbcType="VARCHAR" />
<result column="remark" property="remark" jdbcType="VARCHAR" />
</resultMap>
<sql id="Base_Column_List" >
deptid, deptname, createtime,modifytime,remark
</sql>
<select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Integer" >
select
<include refid="Base_Column_List" />
from dept
where deptid = #{deptid,jdbcType=INTEGER}
</select>

<insert id="insert" parameterType="com.dcits.pojo.Dept" >
insert into dept ( deptid, deptname, createtime,modifytime,remark
)
values (#{deptid,jdbcType=INTEGER}, #{deptname,jdbcType=VARCHAR},
#{createtime,jdbcType=VARCHAR}, #{modifytime,jdbcType=VARCHAR},
#{remark,jdbcType=VARCHAR}
)
</insert>
</mapper>



不太懂这种mapper的实现类如何装配给IdeptDao,希望得到指点,谢谢



...全文
11539 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Asura· 2016-04-09
  • 打赏
  • 举报
回复
ApplicationContext  ac = new ClassPathXmlApplicationContext("classpath:spring-mvc.xml");
            Dept dept = (Dept) ac.getBean("dept");
这段代码的问题..我对spring还不熟悉,在xml配置bean应该出错了.. 后来使用
public String saveDeptInfo(@ModelAttribute("dept") Dept dept,HttpServletRequest request)
解决
Asura· 2016-04-08
  • 打赏
  • 举报
回复
引用 3 楼 Inhibitory 的回复:
<!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dcits.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> basePackage 是 Mapper 接口的包名,不是 dao 的包名
先谢谢你能看我的问题,这里的dao包就是接口包 IDeptDao和IUserDao接口,但是明明IUserDao实现类就可以生成,IDeptDao却不行
Inhibitory 2016-04-08
  • 打赏
  • 举报
回复
<!-- DAO接口所在包名,Spring会自动查找其下的类 --> <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dcits.dao" /> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> </bean> basePackage 是 Mapper 接口的包名,不是 dao 的包名
Asura· 2016-04-07
  • 打赏
  • 举报
回复
重传一下的错误日志

  四月 07, 2016 7:50:58 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [SpringMVC] in context with path [/SmartThemis] threw exception [Request processing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}] with root cause
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1373)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1119)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1014)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:508)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:486)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:615)
	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1214)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:512)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:486)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:615)
	at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:169)
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
	at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:308)
	
  四月 07, 2016 8:09:49 下午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [SpringMVC] in context with path [/SmartThemis] threw exception [Request processing failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'deptService': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.dcits.dao.IDeptDao] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.annotation.Resource(mappedName=, shareable=true, description=, name=, type=class java.lang.Object, authenticationType=CONTAINER, lookup=)}] with root cause

	
Asura· 2016-04-07
  • 打赏
  • 举报
回复
追加俩配置文件spring-mvc.xml

<?xml version="1.0" encoding="UTF-8"?>  
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:mvc="http://www.springframework.org/schema/mvc"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans    
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd    
                        http://www.springframework.org/schema/context    
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd    
                        http://www.springframework.org/schema/mvc    
                        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">  
 
    <mvc:resources mapping="/resources/**" location="/resources/" />
    <mvc:resources mapping="/css/**" location="/css/" />
    <mvc:resources mapping="/fonts/**" location="/fonts/" />
    <mvc:resources mapping="/images/**" location="/images/" />
	<mvc:annotation-driven />
    <!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 --> 
    <context:component-scan base-package="com.dcits.controller" />
    <context:component-scan base-package="com.dcits.service"/>  
    <!--避免IE执行AJAX时,返回JSON出现下载文件 -->  
    <bean id="mappingJacksonHttpMessageConverter"  
        class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>  
    <!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->  
    <bean  
        class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->  
            </list>  
        </property>  
    </bean>  
    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/views/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
      
    <!-- 配置文件上传 -->  
    <bean id="multipartResolver"    
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
        <!-- 默认编码 -->  
        <property name="defaultEncoding" value="utf-8" />    
        <!-- 文件大小最大值 -->  
        <property name="maxUploadSize" value="10485760000" />    
        <!-- 内存中的最大值 -->  
        <property name="maxInMemorySize" value="40960" />    
    </bean>   
	<bean id="user" class="com.dcits.pojo.User"></bean>
	<bean id="dept" class="com.dcits.pojo.Dept"></bean>
</beans>  

还有spring-mybatis.xml

<?xml version="1.0" encoding="UTF-8"?>                                                                       
<beans xmlns="http://www.springframework.org/schema/beans"                                                   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"                                            
    xmlns:mvc="http://www.springframework.org/schema/mvc"                                                    
    xsi:schemaLocation="http://www.springframework.org/schema/beans                                          
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd                     
                        http://www.springframework.org/schema/context                                        
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd                 
                        http://www.springframework.org/schema/mvc                                            
                        http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">                       
    <!-- 自动扫描 -->                                                                                        
    <context:component-scan base-package="com.dcits" ></context:component-scan>                                                  
    <!-- 引入配置文件 -->                                                                                    
    <bean id="propertyConfigurer"                                                                            
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">                      
        <property name="location" value="classpath:jdbc.properties" />                                       
    </bean>                                                                                                  
                                                                                                             
    <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"                                    
        destroy-method="close">                                                                              
        <property name="driverClassName" value="${driver}" />                                                
        <property name="url" value="${url}" />                                                               
        <property name="username" value="${username}" />                                                     
        <property name="password" value="${password}" />                                                     
        <!-- 初始化连接大小 -->                                                                              
        <property name="initialSize" value="${initialSize}"></property>                                      
        <!-- 连接池最大数量                                                                            
        <property name="maxActive" value="${maxActive}"></property> -->                                            
        <!-- 连接池最大空闲 -->                                                                              
        <property name="maxIdle" value="${maxIdle}"></property>                                              
        <!-- 连接池最小空闲 -->                                                                              
        <property name="minIdle" value="${minIdle}"></property>                                              
        <!-- 获取连接最大等待时间                                                                      
        <property name="maxWait" value="${maxWait}"></property> -->                                                
    </bean>                                                                                                  
                                                                                                             
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->                                            
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">                           
        <property name="dataSource" ref="dataSource" />                                                      
        <!-- 自动扫描mapping.xml文件 -->                                                                     
        <property name="mapperLocations" value="classpath:com/dcits/mapping/*.xml"></property>            
    </bean>                                                                                                  
                                                                                                             
    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->                                                       
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">                                         
        <property name="basePackage" value="com.dcits.dao" />                                             
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>                     
    </bean>                                                                                                  
                                                                                                             
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->                          
    <bean id="transactionManager"                                                                            
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">                            
        <property name="dataSource" ref="dataSource" />                                                      
    </bean>                                                                                                  
</beans>                                                                                                     

67,542

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧