1. 为什么需要使用Spring Boot Starter
随着项目的迭代,常常遇到这些问题:
- 如何快速引入第三方组件
- 在不同项目中重复实现通用功能如何进行整合
Spring Boot Starter 就是帮助你解决这些问题的工具箱,通过一些封装好的Starter包,能够帮助你很容易的引入第三方组件。
同样的,你也可以通过这种机制,快速的封装业务通用的功能,便于项目组引入并使用。
下面是小叶在工作过程中与 Spring Boot Starter 的碰撞的过程:
1.1. 小叶的挑战:引入 MyBatis 组件
小叶作为新加入团队的工程师。在项目初期,领导老张交代他去实现数据持久化,团队决定使用 MyBatis。小叶有两种选择:手动配置 bean,或使用 mybatis-spring-boot-starter。
小叶选择了手动配置,在这一过程中遇到了许多琐碎的细节,比如 SQL 会话工厂的配置、映射文件的位置等。他需要先了解Mybatis中存在哪些组件,这些组件又是如何配合工作的,如何一步一步的引入这些组件并进行配置和组装......
这些琐碎庞杂的事项让刚接触这个框架的小叶无所适从,一不留神就陷入了细节的地狱中爬不出来。
后来,他的领导老张建议试试 mybatis-spring-boot-starter。
小叶按照建议,只需在 application.yml 中简单配置几行参数,所有复杂的配置就自动完成了。
这让小叶非常惊喜,由衷感慨于Spring Boot Starter的开箱即用的体验是多么美妙。
1.2. 项目功能的演进与小叶的思考
随着项目迭代,老张意识到一些通用功能的重要性。团队基于 MyBatis 开发了一些通用组件:
- 乐观锁机制:防止多个用户同时修改同一数据,确保数据一致性。
- 逻辑删除机制:通过标志位代替物理删除,方便数据恢复和管理。
- 权限框架结合的业务字段更新:在增删改操作时自动更新创建人、更新人等字段,确保数据可追溯。
- 分页查询功能:提供通用分页查询逻辑,节省开发时间。
这些功能在不同项目中被反复实现,导致代码重复、维护困难。每个项目组的实现方式略有不同,增加了系统复杂度。老张让小叶思考思考如何解决这些问题。
1.3. 小叶的灵感:封装为 Starter
这时,小叶又想到了Spring Boot Starter,解决这些问题,只需要将这些通用功能封装为一个Starter。这样,各项目只需引入 Starter 就能使用这些经过验证的功能,避免重复开发。
封装为 Starter 的好处:
- 减少代码重复:各项目无需重复实现相同逻辑,减少代码量和开发时间。
- 统一规范:
Starter遵循统一规范和最佳实践,确保项目行为一致,减少沟通成本。 - 易于维护和升级:只需在
Starter中修改通用功能,各项目更新依赖即可,无需逐一修改。 - 降低学习成本:开发人员只需熟悉
Starter的使用方式,无需了解其内部实现,降低上手难度。
最终,小叶和团队通过封装Spring Boot Starter,实现了代码复用和维护的便利性,显著提升了开发效率和系统稳定性。引入Spring Boot Starter帮助团队从繁琐细节中解放出来,专注于更有价值的功能开发。
2. 如何定义Spring Boot Starter
小叶顺利完成了Spring Boot Starter的封装,并引入了组内的多个项目中,收获了不少好评。因此,老张希望小叶能够分享一下封装过程中的经验和步骤。
小叶总结了以下几个关键的步骤:
2.1. 创建基础项目结构
首先,小叶创建了一个新的Maven项目,其中包含两个模块:
- 核心模块(用于定义核心逻辑)
- 自动配置模块(用于实现
Spring Boot的自动配置)
这种分离的设计有助于清晰的管理核心功能和配置。
2.2. 定义核心逻辑
在核心模块中,小叶实现了通用功能的具体逻辑。比如:
Mybatis的配置- 乐观锁
- 权限框架结合的业务字段更新
- 分页查询
等。这些逻辑是Starter的核心,是业务系统引入Starter后可以使用的部分。
2.3. 编写自动配置类
在自动配置模块中,小叶编写了自动配置类:
- 使用了
@AutoConfiguration注解,将需要的组件注入Spring容器。 - 通过
@ConditionalOnMissingBean等条件注解确保只有在满足条件时才能够自动装配。
这样,项目中既可以使用Starter提供的默认配置,也可以根据需要使用自定义的组件进行替换。
2.4. 使用spring.autoConfiguration.imports进行注册
为了让Spring Boot识别自动配置类,小叶在META-INF目录下创建了
org.springframework.boot.autoconfigure.AutoConfiguration.imports
文件,并将需要自动装配的类注册到其中。
这样Spring Boot在启动时会自动加载这些配置类,完成相应的初始化。
在Spring Boot 3.x版本中推荐使用
org.springframework.boot.autoconfigure.AutoConfiguration.imports进行配置。在Spring Boot 2.x版本中使用
spring.factories进行配置。
2.5. 测试验证并发布
在对Starter进行全面的测试后,小叶将Starter引入到自己的项目中,并验证了所有功能如预期工作。
在测试通过后,小叶将Starter发布到公司的私有Maven仓库,以便其他团队成员能够方便地引入和使用。
通过以上步骤,小叶成功地将项目中可复用的功能封装为一个Spring Boot Starter,为团队的开发流程带来了显著的改进。