前言:在使用Spring Boot+Mybatis时,写完Mapper接口、Service、Controller后,启动(图1)打包项目(图2)均失败,提示无法自动注入bean。
完成目标:
1、无法自动注入bean错误信息
2、代码展示
3、解决方案
一、错误信息:
Description:
Field userMapper in com.openplat.system.service.UserService required a bean of type 'com.openplat.system.mapper.UserMapper' that could not be found.
Action:
Consider defining a bean of type 'com.openplat.system.mapper.UserMapper' in your configuration.
图1
图2
二、代码展示:
1、UserMapper.java
2、UserService.java
3、UserController.java
三、解决办法:
根据英文的提示是在配置中找不到一个指定自动注入类型的bean,
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
Application类是指SpringBoot项目入口类。
这个类的位置很关键:
如果Application类所在的包为:com.openplat,则只会扫描com.openplat包及其所有子包,如果mapper、service所在包不在com.openplat及其子包下,则不会被扫描。
即, 把Application类放到mapper、service所在包的上级,com.openplat.OpenPlatApplication
知道这一点非常关键,不知道Spring文档里有没有给出说明,如果不知道还真是无从解决。
1 .将接口与对应的实现类放在与application启动类的同一个目录或者他的子目录下,这样注解可以被扫描到,这是最省事的办法
2 .在指定的application类上加上这么一行注解,手动指定application类要扫描哪些包下的注解(图3)
图3
@ComponentScan(basePackages = "com.openplat.system.mapper.*")
Spring Boot与Spring Cloud学习使用可参看笔者博客