• SpringBoot+mybatis


    初次接触springboot,只知道他采用了很多默认配置,自觉不用配置什么东西拿来用就行,就遇到了这样的问题:

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.example.demo.dao.UserDao' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@javax.annotation.Resource(shareable=true, lookup="", name="", description="", authenticationType=CONTAINER, type=java.lang.Object.class, mappedName="")}
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1654) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1213) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1167) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:520) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:496) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:636) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:180) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:321) ~[spring-context-5.1.6.RELEASE.jar:5.1.6.RELEASE]
        ... 57 common frames omitted

    很显然mybatis没有根据接口和map.xml文件自动生成bean,那么问题就应该出在与mybatis有关的配置里面,但是springboot的配置实在太少了,少到一眼就看完,并且我也没发现有什么问题。:

    一次偶然的机会我在一篇博客上看到了,人家写的springboot的启动类前边有个注解

    @MapperScan("com.jy.affairs.mapper.*")

    而我的是没有的,加上后果然不报错了。

    值得一提的是:

    如果将这个注解加到springboot的启动类上,那么它不仅对springboot本身生效,junit测试类也是可以运行的。

    @SpringBootApplication
    @MapperScan("com.example.demo.dao")
    public class Demo1Application {
        public static void main(String[] args) {
            SpringApplication.run(Demo1Application.class, args);
        }
    }

    如果不加的话,在junit测试类的基类上加这个东西也行,但是这样只能使junit正常运行,springboot本身还是不行的

    @RunWith(SpringRunner.class)
    @SpringBootTest
    @MapperScan("com.example.demo.dao")
    public abstract class AbstractTest {
    
    }

    对这一现象我的猜测是@SpringBootTest这个注解隐式的引用了启动类上的@MapperScan这个注解

  • 相关阅读:
    第一类第二类丢失更新
    收藏文章
    Oracle常见授权与回收权限——grant和revoke
    web.xml组件加载顺序
    Java的native方法
    serialVersionUID作用
    Css选择器和JQuery基本编程接口
    使用Spring IoC进行Bean装配
    关于C/C++的一些思考(5)
    关于C/C++的一些思考(4)
  • 原文地址:https://www.cnblogs.com/liujinming/p/10709166.html
Copyright © 2020-2023  润新知