1、Spring中的applicationContext.xml配置错误导致的异常

  异常信息:

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.ssm.service.BTestService.getPhoneKey
    at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:223)
    at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
    at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:59)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:52)
    at com.sun.proxy.$Proxy17.getPhoneKey(Unknown Source)

  如果是service接口调用出现此错误信息,注意这里不是myabtis接口mapper.java调用出现了此错误

  导致异常的错误配置如下:

  注意不要配置成  com.ssm.dao.* 这种配置方式扫描的是dao下的子包,最好配置为精准扫描包

  

  为什么 说这里被mybatis重复扫描了呢?如图所示这里的 service在debug下查看是org.apache.ibatis.binding.MapperProxy@******

  

  如果配置扫描是这种com.ssm.dao.*,会报如下错误

  Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ssm.dao.AppUserPhonekeyMapper         com.ssm.service.BTestServiceImpl.appUserPhonekeyMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type   [com.ssm.dao.AppUserPhonekeyMapper] 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)}

at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:531)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:295)

 2、以为是Spring中bean命名导致的错误

  异常信息如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'beanTestController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ssm.service.TBestService com.ssm.controller.BeanTestController.tBestService; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.ssm.service.TBestService] is defined: expected single matching bean but found 2: TBestServiceImpl,TBestService

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.ssm.service.TBestService com.ssm.controller.BeanTestController.tBestService; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.ssm.service.TBestService] is defined: expected single matching bean but found 2: TBestServiceImpl,TBestService
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:531)

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [com.ssm.service.TBestService] is defined: expected single matching bean but found 2: TBestServiceImpl,TBestService

  配置如下:

    这里的spring核心配置文件中的mybatis扫描配置还是最大范围的,包含了service接口,这里controller中配置如下

    注意:上面的异常是不能找到注入的名称,命名规则如下(myabtis应该是这样的!,spring中@Autowired注入名称正常是任意的命名),如果controller写成了   

         private TBestService TBestService  这种写法启动不报错,但是这时候的TBestService 在DEBUG模式下查看还是第一种里面的MapperProxy ,运行时还是会报第一种错

3、Spring @Autowired注入名称正常是任意的命名,测试如下:

  spring自动对应找到了,service接口的实现类

  有人可能怀疑是 注解的问题@Autowired 和@Resource不一样,测试过,是一样的!!具体这两个注解的区别大家可以参考 :

    https://www.cnblogs.com/smileLuckBoy/p/5801678.html

4、补充一下原来遇到的坑:Spring中的事务失效,事务不回滚原因

  正常情况就是注解扫描的问题,

  原来失效情况是这样的:

  spring中的applicationContext.xml中的扫描 

 <context:component-scan base-package="com.ssm.*">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
</context:component-scan> 这里扫描了service接口以及实现,但是springmvc扫描又把service接口和实现扫描了一遍,导致了springmvc接管了service接口,正常的访问和其他操作都没问题,当需要事务回滚就不好用了。  
总结: 在这里建议大家在spring xml文件配置中需要注意扫描的范围. 
   1、spring负责扫描全局范围的注解   
   2、mybatis注解扫描 dao的包    
   3、springmvc需要扫描 controller 
  千万不要扩大范围,很容易带来一些费解的错误.

Spring,SpringMvc配置常见的坑,注解的使用注意事项,applicationContext.xml和spring.mvc.xml配置注意事项,spring中的事务失效,事务不回滚原因的更多相关文章

  1. Spring @Transaction配置演示样例及发生不回滚原因深度剖析

    背景 近期在公司做的一个项目,用的是SpringMVC框架,数据库用的是MySql,刚開始并没有增加事务,后因业务须要必须事务处理. 问题的产生和解决 使用事务,直接问百度,我选择的是注解的方式. 在 ...

  2. spring data jpa使用@Transactional注解开启事务后失败不回滚

    如题,在数据库批量操作方法上使用@Transactional注解,其中一条数据抛出异常了,却死活不回滚. 批量操作方法是公有的,spring也是默认支持事务的,排除代码层面问题,那么就看看数据库是否支 ...

  3. Spring事务不回滚原因分析

    Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离. 在我完成一个项目的时候,遇到了一个Spring事务不回滚的问题,通过aspectJ和@Transacti ...

  4. @Transactional注解不回滚原因详解

    最近试了试spring的回滚功能,根据网上的教程配置怎么都不好使,遂寻找答案, 网上的答案都是这么讲的: 1. 检查你方法是不是public的. 2. 你的异常类型是不是unchecked异常.如果我 ...

  5. Spring transaction事务之roll back回滚

    转载自:http://blog.csdn.net/lovejavaydj/article/details/7635848 试验方法: 写一个单元测试,调用一个service层方法(发生对数据库进行写操 ...

  6. spring事务不会进行回滚的情况

    if(userSave){ try { userDao.save(user); userCapabilityQuotaDao.save(capabilityQuota); } catch (Excep ...

  7. Spring transaction事务 roll back各种回滚

    Spring的AOP事务管理默认是针对unchecked exception回滚. 也就是默认对RuntimeException()异常极其子类进行事务回滚. Exception作为基类,下面还分ch ...

  8. Spring+Junit,测试事务时,一直回滚

    研究了好长时间,都不知道原因,也不能解决. 控制台又没有报异常,但是就是一直回滚.注释掉spring声明式配置的代码,就能正确的更新数据. 从网上看了,别人的文章 http://blog.csdn.n ...

  9. mysql事务管理及spring声明式事务中主动异常抛出使数据库回滚

    mysql的引擎常用的有两个,一个MyISAM,另一个是InnoDB,mysql默认的为MyISAM,而InnoDB才是支持事务的.所以一般需要修改下,如何修改就不说了. 事务需要依赖数据库,好久没使 ...

随机推荐

  1. 录音--获取语音流(pyAudio)

    这是学习时的笔记,包含相关资料链接,有的当时没有细看,记录下来在需要的时候回顾. 有些较混乱的部分,后续会再更新. 欢迎感兴趣的小伙伴一起讨论,跪求大神指点~ 录音-语音流(pyAudio) tags ...

  2. springcloud config 提取公共参数

    每个微服务都有自己的配置文件application-local.yml和bootstrap.yml, 这个两个配置文件的读取顺序是先读取bootstrap.yml文件,在读取application-l ...

  3. phantomjs的安装和使用链接

    1.先下载phantomjs并解压2.将phantomjs的bin目录配置到环境变量中3.测试phantomjs,cmd下输入phantomjs进入 (按 Ctrl + c 组 合键退出和 phant ...

  4. 使用Spring+MySql实现读写分离(一)关于windows下安装mysql5.6

    前面讲过关于mysql的优化,主要是建表时对于大量数据的表添加索引机制,提高查询效率,以及一些sql语句的简单优化,毕竟我也不是专业的数据库管理员,大牛勿喷. 今天写两章关于javaweb项目中,对于 ...

  5. [python] 3 、基于串口通信的嵌入式设备上位机自动测试程序框架(简陋框架)

    星期一, 20. 八月 2018 01:53上午 - beautifulzzzz 1.前言 做类似zigbee.ble mesh...无线网络节点性能测试的时候,手动操作然后看表象往往很难找出真正的原 ...

  6. Javascript高级编程学习笔记(40)—— DOM(6)CDATASection、DocumentType

    CDATASection类型 CDATASection类型是只针对XML文档的类型 因为浏览器无法解析 在浏览器中创建CDATASection的函数也无法正常使用 该类型有以下属性 nodeType: ...

  7. 2.抽取代码(BaseActivity)

    知识点 俩种退出程序的方法 复制集合 同步的用法 字符数组 工厂模式,生产fatgment,解决了碎片重复创建的问题 全局上下文 actionbar用法 fargmentadapter,当viewpa ...

  8. go语言面向对象编程之类型系统

    go语言类型系统 类型系统,顾名思义是指一个语言的类型体系结构,一个典型的类型系统通常包含如下基本内容 基础类型:如byte,int,bool,float等 复合类型:如数组,指针,结构体 可以指向任 ...

  9. Python开发端口扫描器

    首先是最常用的端口扫描器: 虽说有nmap等强大的工具,不过如果由于条件限制无法安装Nmap呢? 我这个脚本写的比较简单,默认扫描1-65535全部的端口 实际的话,可以根据需要自己修改脚本来实现定制 ...

  10. vim常用命令行备忘总结

    一 窗口切换 1 :sp    水平切换当前窗口 2 :vsp 垂直切换当前窗口 3 :clo 关闭活动窗口 4 : on 只保留活动窗口 5 : ctrl + w  在窗口间循环切换  ctrl + ...