关于mybatis mapper类注入失败的解决方案
重新创建了一个项目,代码结构有所改变,结果在启动服务时,一直报如下错误
严重:
Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'car1UserInfoService': Unsatisfied dependency expressed through field 'mapper'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.bonade.core.base.BaseMapper<com.bonade.system.car1user.model.Car1UserInfo>' 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:587)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1344)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:578)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:409)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:291)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:103)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4939)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5434)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
at java.util.concurrent.FutureTask.run$$$capture(FutureTask.java:266)
at java.util.concurrent.FutureTask.run(FutureTask.java)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.bonade.core.base.BaseMapper<com.bonade.system.car1user.model.Car1UserInfo>' 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:1509)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1104)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584)
... 25 more
思考过程:
1.mybatis jar包增加ok
2.mybatis的xml配置,已经配置
3.其他正常的model类,放过来依然报错,证明不是model类的问题,在装载model时正常
4.根据报错信息:
Error creating bean with name ‘car1UserInfoService': Unsatisfied dependency expressed through field ‘mapper'
找到对应的代码
@Autowired
protected BaseMapper<T> mapper;
发现是装载BaseMapper时报错,那么猜测是BaseMapper没有被加载到spring容器。
此时查看mybatis.xml配置文件
再看看mapper文件路径:
发现配置文件和它对应不上,所以扫描不到mapper类,猜测是这个原因导致报错。所以修改了下
结果启动正常。
但是这样子,对于工程来说,mapper文件的层级就固定死了,所以可以这样子配置:
这里面涉及到一个语法:
1.?代表匹配任意一个字符,* 代表匹配0个或多个任意字符 ,**/匹配任意多个目录
2.对于多个路径,可以用,分割
备注:
改成第二种方式也能解决问题,但是发现启动的速度减慢了,因为扫描的包增多了,需要的时间也延长了。
所以如果能统一一种规范,来进行开发的话,还是用第一种方式。
以上这篇关于mybatis mapper类注入失败的解决方案就是小编分享给大家的全部内容了,希望能给大家一个参考
您可能感兴趣的文章:
- 转载一篇关于MySql启动失败 错误代码:1067 的解决方案
- [转载]关于"编译器失败,错误代码为128。"的解决方案
- 关于Win7旗舰版下的SQL Server 2008 R2 附加05或08数据库附加失败的原因解决方案其一
- 关于Spring容器初始化注入失败
- 关于就win32应用程序在64位机器上读取system目录下文件失败的问题的解决方案
- 关于Linux内核编译失败的一些解决方案
- 关于使用putty私钥连接linux出现失败的原因解决方案
- 关于《创建组件**失败。错误消息为**未能加载文件或程序集**或它的某一个依赖。系统找不到指定文件。》的解决方案
- 关于使用repo时repo init和repo sync失败的一个解决方案
- 关于Win8.1 无法安装驱动,打印机安装失败,请关闭后尝试以下步骤的解决方案
- 关于使用shiro做权限 上传文件失败的问题 解决方案
- 关于维优云wiucloud登陆失败的最新解决方案
- 注入FactoryBean失败分析+解决方案
- 关于服务器上发送邮件程序发送失败的解决方案
- 关于dao层Bean注入失败报No qualifying bean of type [xxx.xxx.xxx.xxx] is defined错误的问题
- 关于loadrunner运行场景时提示“初始化失败,通信错误”的解决方案
- 关于centos 7 中service iptables save 指令使用失败的解决方案
- 关于使用genymotion"创建 VirtualBoxClient COM 对象失败. 应用程序将被中断“的解决方案
- 关于VS code 安装go 插件失败解决方案!!!
- 关于“ORA-12545: 因目标主机或对象不存在,连接失败。”原因分析及解决方案