ctrlC & ctrlV

我们不生产代码,我们只是代码的搬运工~

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

项目背景,在做项目时使用了一套别人的Spring boot三方开源系统当基础框架,然后在此系统基础上增加子模块,书写新的controller接口和业务逻辑。项目结构如下图:

system是@SpringBootApplication标注类所在的主工程模块,statistics是我建立的子模块,我在该子模块下建立了controller接口,也进行了注解,但是启动后访问该接口,提示404错误找不到该接口。


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

经过排查解决过程如下:

1、@SpringBootApplication标注类一定要增加@ComponentScan标注,标识主模块包名+子模块包名

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2、务必在主模块pom.xml中依赖子模块,网上很多教程根本没说这一步,只说使用@ComponentScan标注,只使用@ComponentScan标注,亲测无效!

 

 

 

 3、@ComponentScan标注了,主模块pom.xml把子模块也导入后,务必刷新maven依赖,否则还是不会生效,不要以为直接run就可以了,我就是被这里坑了一下午,点击Reload project

 

 4、这时可以运行了,各位可以看到,一个完全不同包名的子模块下的controller接口,在swagger中显示出来了,打完收工!

 

 

5、原理性的东西补充一下,Spring Boot在进行组件扫描时

5.1 如果你的其他包层次结构位于使用@SpringBootApplication标注主应用程序下方,则隐式组件扫描将自动涵盖。也就是说,不要明确标注@ComponentScan,Spring Boot会自动搜索当前应用主入口目录及其下方子目录。
5.2 如果其他包中的bean /组件不在当前主包路径下面,,则应手动使用@ComponentScan 添加,指定需要扫描的路径,他就会完全按你指定的路径进行扫描,所以你必须指定主工程、子模块所有的包名
5.3 如果使用了@ComponentScan ,那么Spring Boot就全部依赖你的定义,如果定义出错,会出现autowired时出错,报a bean of type that could not be found错误,让你很恼火哦。

posted on 2021-11-22 17:38  Rocky_  阅读(4205)  评论(1编辑  收藏  举报