springboot项目多模块开发主启动类是如何扫包完成Bean注入的

引言

springboot框架作为目前java后端开发的主流框架,其可以很方便的整合bean容器spring以及持久层框架mybatis,即所谓的SSM框架。在springboot项目中存在着一个主启动类(ConsoleAdminApplication)其上含有@SpringBootApplication注解,当启动类启动后,其会自动扫描同包及其子包下的标注了spring四大注解的功能类,并生成实例对象装入spring容器中供后续使用。但在开发的过程中,可能会采用多模块的开发方式,即将SSM的三层结构(Controller、Service、Mapper)放在不同的文件夹(模块)下,那么这种情况下主启动类是如何扫描到其它模块下的功能类的呢?

多模块开发项目结构

在这里插入图片描述
以上是一个多模块开发的目录结构:
1、为springboot项目的主启动类;
2、为主启动类所在的包,在该模块下通常存放Controller层代码;
3、为另一模块下Java主要代码,实际在这里存放着Service与Mapper两层代码(Mapper.xml在resources目录下);

加载扫描过程分析

针对我们在引言中抛出的疑问,可能我们的第一反应是,因为在包含主启动类的模块的pom中引入了另一个模块的依赖呀。没错,但是你只回答了一半。我们知道标注了spring几大bean注解类必须要被扫描到,才能被spring注册进容器中,那么如果只引入了依赖就一定能够保证被扫描到吗?答案是不能的,在这里还需要做到另外的关键一点就是要保证各模块的Java基础包路径一致。也就是说将主启动类所在的包 yl.framework 作为另外的子模块的Java文件的基础包路径,这样在引入依赖后,才能够保证service层与mapper层被成功扫描到,并装入spring容器中。否则将会出现Service与Mapper实例无法注入的报错问题。这里也可以这样考虑,保证基础包路径一致后,再引入依赖,就相当于将 yl.framework.console 包平移进主启动类所在包 yl.framework 下,所以此时可以被成功扫描到了。

小结

springboot项目多模块开发要保证2点必须做到:
一、主启动类所在模块要引入另外模块的依赖,多个模块下也可以利用依赖的传递性,“链式引用”也可;
二、保证基础包的路径一致,基础包路径为主启类所在的包相对路径;

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值