编程知识 cdmana.com

SpringBoot2.x系列教程(六十五)SpringBoot扫描其他项目的几种方案

最近接手一套基于SpringBoot项目,对项目进行重构调整,将公共部分抽离成子项目。在实践的过程中,发现抽离之后的模板中组件并没有被初始化。于是将排查解决过程中搜集到的方案及知识汇总分享给大家。

问题原因

问题的原因很简单,因多套系统的package命名不一致。比如业务系统的包命名为com.abc.xx,而公共(common)部分的包命名为com.efg.xx,引入公共jar包时默认是无法初始化的。

springboot

对于SpringBoot项目,我们知道扫描的路径从启动类所在包开始,扫描当前包及其子级包下的所有文件。上图如果启动类在com.abc包下,肯定是无法扫描到com.def包内的组件的。

场景延伸

SpringBoot的这个机制还延伸出另外两个场景。

第一个场景是如果SpringBoot的启动类放的包路径靠下,那么在它上级目录中的组件是无法被扫描并初始化的。新手往往会因放错位置导致启动时异常。

第二个场景是故意将一些不需要纳入SpringBoot容器的类放在其他包中,避免被SpringBoot容器加载。当然此时也可以使用ComponentScan来指定排除对应的包。

├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── secbro
│   │   │           ├── SpringBootMainApplication.java
│   │   │           ├── controller
│   │   │           

版权声明
本文为[二师兄-公众号-程序新视界]所创,转载请带上原文链接,感谢
https://hello.blog.csdn.net/article/details/109141040

Scroll to Top