springboot扫描不到service_SpringBoot扫描不到组件?给你提供几种方案

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

问题原因

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

a2fa0983d57bcb4f2b015705a249088f.png

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

场景延伸

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

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

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

├── src│   ├── main│   │   ├── java│   │   │   └── com│   │   │       └── secbro│ 
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值