Spring Boot Starter【01】:如何定义Spring Boot Starter

209 阅读5分钟

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 的好处:

  1. 减少代码重复:各项目无需重复实现相同逻辑,减少代码量和开发时间。
  2. 统一规范Starter 遵循统一规范和最佳实践,确保项目行为一致,减少沟通成本。
  3. 易于维护和升级:只需在 Starter 中修改通用功能,各项目更新依赖即可,无需逐一修改。
  4. 降低学习成本:开发人员只需熟悉 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,为团队的开发流程带来了显著的改进。