首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

Spring Boot中使用MongoDB数据库(4)

Spring Boot中使用MongoDB数据库(4)

可能遇到的问题

Description:

Field userRepository in com.biologic.api.SampleController required a bean of type 'com.biologic.service.UserRepository' that could not be found.


Action:

Consider defining a bean of type 'com.biologic.service.UserRepository' in your configuration.



原因

SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描!
“Application类”是指SpringBoot项目入口类。这个类的位置很关键:

如果Application类所在的包为:com.biologic.api,则只会扫描com.biologic.api包及其所有子包,如果service或dao所在包不在com.biologic.api及其子包下,则不会被扫描!

根据英文的提示是在配置中找不到一个指定自动注入类型的bean,经过多方排查得出结论:
正常情况下加上@Component注解的类会自动被Spring扫描到生成Bean注册到spring容器中,既然说没找到,也就是该注解被没有被spring识别,问题的核心关键就在application类的注解SpringBootApplication上。

解决方式

至此,得出两种解决办法:
  1 .将接口与对应的实现类放在与application启动类的同一个目录或者他的子目录下,这样注解可以被扫描到,这是最省事的办法
注意这样也是扫描不到的

这样是可以的

  2,如果是其他子项目引入进来的包,可以通过对Application类添加@ComponentScan(basePackages={“xxx.xxx”,”xxx.xxx”})来指定扫描的包,但是需要注意的是引入的包路径仍然需要跟application启动类的同一个目录或者他的子目录下。而且一旦指定后就不会在默认扫描Application类下的包,所以需要扫描Application类下的包需要把Application类下的包也加在路径里。在指定的application类上加上扫描路径这么一行注解,手动指定application类要扫描哪些包下的注解,如下:

@ComponentScan(basePackages = {"com.biologic.api","com.biologic.service"})
返回列表