平时spring boot 都是自动扫描,没有注意,当项目分多个工程,并且包名变化后,就遇到找不到Bean的问题了,这时就想起来spring boot扫描的原理了
经在网上查找发现:
SpringBoot项目的Bean装配默认规则是根据Application类所在的包位置从上往下扫描! “Application类”是指SpringBoot项目入口类。这个类的位置很关键:
如果Application类所在的包为:io.github.gefangshuai.app
,则只会扫描io.github.gefangshuai.app
包及其所有子包,如果service或dao所在包不在io.github.gefangshuai.app
及其子包下,则不会被扫描!
知道这一点非常关键,不知道Spring文档里有没有给出说明,如果不知道还真是无从解决。
在开发中我们知道Spring Boot默认会扫描启动类同包以及子包下的注解,那么如何进行改变这种扫描包的方式呢,原理很简单就是:@ComponentScan注解进行指定要扫描的包以及要扫描的类。
于是在spring boot 启动类添加
@ComponentScan(basePackages="com.xxxx")
问题解决