SpringBoot多模块项目下的包和组件扫描

问题阐述:为了简化项目代码,我们通常会使用多模块化代码进行开发,但是会出现如下问题:写代码时能够正常扫描或注入其他模块的Service,但是启动类一启动就报错Consider defining a bean of type 'com.xiaoqian.common.service.IArticleService' in your configuration.,意思是要让我们再去注册一个Bean,显然是公共模块下的Bean并没有注册成功。

项目结构示例如下图:
SpringBoot多模块项目下的包和组件扫描_第1张图片

解决方案:在启动类上添加@ComponentScan注解和@MapperScan注解

@SpringBootApplication
@MapperScan("com.xiaoqian.common.mapper")
@ComponentScan({"com.xiaoqian.blog", "com.xiaoqian.common"})
public class MainApplication {
    public static void main(String[] args) {
        SpringApplication.run(MainApplication.class, args);
    }
}

原因解释:主程序使用@SpringBootApplication默认配置是扫描主程序这个类所在的包及其子包下的组件类,当blog模块需要调用公共模块common下的Article或者使用其Service接口时,必须要使用注解@ComponentScan配置组件扫描,如果还集成了MyBatis,还需要使用@MapperScan扫描Mapper接口,因为@ComponentScan默认扫描的是Spring框架下Repository注解的接口。

你可能感兴趣的:(spring,boot,java,后端)