SpringBoot配置跨模块扫描问题解决方案

简介: 在分布式项目中,使用Maven进行多模块开发时,某些模块(如xxx-common)没有启动类。如何将这些模块中的类注册为Spring管理的Bean对象?本文通过案例分析,介绍了两种解决方案:常规方案是通过`@SpringBootApplication(scanBasePackages)`指定扫描路径;推荐方案是保持各模块包结构一致(如com.xxx),利用SpringBoot默认扫描规则自动识别其他模块中的组件,简化配置。

一、问题说明

现在很多分布式项目中,会使用Maven进行分模块开发。在多模块分包管理的情况下,模块依赖之间存在相互引用,有些模块是不需要启动类的,例如xxx-common模块,甚至一个项目只有一个启动类,在这种情况下,我们应该如何将无启动类其他模块中的类,注册为Spring管理的Bean对象呢?

二、场景案例分析

假设现在有个场景,admin模块的pom引入了common模块,我们想要将AliOSSUtils注册为bean对象。但启动类不在common模块下,这种情况如何保证其他模块中加了@Component、@Configuration这种类被SpringBoot扫描到?

三、问题解决方案

1、常规解决方案

我们首先要知道SpringBoot启动类的默认包扫描规则:

SpringBootApplication启动时会默认扫描启动类当前所在包及其子包。

在启动类上,加入了@SpringBootApplication注解,如果需要扫描启动类当前包和子包以外的其他包,可用如下注解属性配置实现:

@SpringBootApplication(scanBasePackages = {"com.dkd","com.xxx.commmon"})  // SpringBoot项目指定要扫描的包
//@ComponentScan(basePackages = {"com.dkd","com.dkd.commmon"})  // 非SpringBoot项目指定要扫描的包,@ComponentScan优先级高于@SpringBootApplication中的scanBasePackages
public class DkdApplication {
    public static void main(String[] args) {
        SpringApplication.run(DkdApplication.class, args);
    }
}

2、推荐解决方案

观察一下案例中不同模块的包结构:

由于SpringBoot启动类的默认包扫描规则,会扫描com.dkd包及其子包,虽然它们属于不同模块,但是启动类所在的模块引入了其他模块的依赖。在编译成jar包时,会进行同包合并。也就是说dkd-common模块下的包结构也保持com.dkd,这样就不用专门指定scanBasePackages包扫描路径。SpringBoot会自动扫描其他模块下同结构的包

因此我们的项目包结构尽量定义为:

xxx-parent(父模块)

---xxx-admin(子模块)

------com.xxx.admin

------XxxApplication(启动类)

---xxx-common(子模块)

------com.xxx.common

---xxx-manage(子模块)

------com.xxx.manage

......


相关文章
|
1月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
60 0
|
10天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
54 14
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
50 1
SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
缓存 IDE Java
SpringBoot入门(7)- 配置热部署devtools工具
SpringBoot入门(7)- 配置热部署devtools工具
48 2
 SpringBoot入门(7)- 配置热部署devtools工具
|
1月前
|
存储 前端开发 JavaScript
springboot中路径默认配置与重定向/转发所存在的域对象
Spring Boot 提供了简便的路径默认配置和强大的重定向/转发机制,通过合理使用这些功能,可以实现灵活的请求处理和数据传递。理解并掌握不同域对象的生命周期和使用场景,是构建高效、健壮 Web 应用的关键。通过上述详细介绍和示例,相信读者能够更好地应用这些知识,优化自己的 Spring Boot 应用。
36 3
|
1月前
|
Java 数据库连接
SpringBoot配置多数据源实战
第四届光学与机器视觉国际学术会议(ICOMV 2025) 2025 4th International Conference on Optics and Machine Vision
64 8
|
1月前
|
Java 数据库连接 数据库
springboot启动配置文件-bootstrap.yml常用基本配置
以上是一些常用的基本配置项,在实际应用中可能会根据需求有所变化。通过合理配置 `bootstrap.yml`文件,可以确保应用程序在启动阶段加载正确的配置,并顺利启动运行。
186 2
|
1月前
|
Java Spring 容器
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
SpringBoot读取配置文件的6种方式,包括:通过Environment、@PropertySource、@ConfigurationProperties、@Value读取配置信息
127 3
|
SQL 关系型数据库 MySQL
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
SpringBoot自定义配置注入的方式:自定义配置文件注入,从mysql读取配置进行注入
323 0
|
7月前
|
Java 数据库连接 Maven
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
SpringBoot【付诸实践 01】SpringBoot自定义starter保姆级教程(说明+源码+配置+测试)
77 1