问题阐述:为了简化项目代码,我们通常会使用多模块化代码进行开发,但是会出现如下问题:写代码时能够正常扫描或注入其他模块的Service
,但是启动类一启动就报错Consider defining a bean of type 'com.xiaoqian.common.service.IArticleService' in your configuration.
,意思是要让我们再去注册一个Bean
,显然是公共模块下的Bean
并没有注册成功。
项目结构示例如下图:
解决方案:在启动类上添加@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
注解的接口。