likes
comments
collection
share

第一节 为什么会是 SpringBoot Starter

作者站长头像
站长
· 阅读数 31

第一节 为什么会是 SpringBoot Starter

tips:本系列文章中 Starter,除 xxx-starter 等用小写,其他都以大写开头。

一、我与 Starter 的一些故事

1.1 多云架构的升级经历

一套代码多个环境运行

2021 年有幸参与了公司的多云架构升级,将应用从私有云改造升级,以便支持信创环境、公有云环境等多环境。 达到 一套代码在多个环境上运行。

第一节 为什么会是 SpringBoot Starter

saas 行业非常普遍,大客户想让产品部署到自己的环境; 小客户没有更多预算,因此选择公有云的 saas 版。由于诉求不同,常常会出现多个分支版本,如果依赖的中间件不支持,则还需进行改造。

中间件的依赖

由于环境不同、技术选型不同;常常出现不同的套装组合。

第一节 为什么会是 SpringBoot Starter

如何实现这样复杂的场景呢?有很多主张,当然都各有优劣。

  1. 多分支
  2. if...else
  3. Starter
  4. ......

PK 过后,最终选择了 Starter。结果也证明了它确实是不错的选择。

Starter 的方式。

在这一次的改造过程中,我全面认识了 Starter 的优势。

第一节 为什么会是 SpringBoot Starter

各个环境依赖接口层,中间件的具体实现,以 Starter 高度模块化下层到底座,通过按需加载,实现多环境的适配。


1.2 Starter 被复用的经历

将通用性和变化性进行解耦,抽象并下沉通用部分,从而实现代码的可移植性。

做过一次技术分享,主题是围绕一个具体场景,沉淀了通用的 Starter。 不久后,其他兄弟部门遇到了这样的场景,然后它把我的 Starter 集成到了他们的应用里面了。

第一节 为什么会是 SpringBoot Starter

1.3 面试者和面试官

第一节 为什么会是 SpringBoot Starter

作为面试者

当我说我熟悉 SpringBoot 的时候,面试官总会说,你能说说 SpringBoot Starter 的原理吗?

那个时候的我: 嗯.... 支支吾吾

作为面试官

这些年,也当过多次面试官,在校招和社招的面试经历中,也用这道题面试过不少同学,大多数都能答上来一些,但能把这题答好的并不多。

现在看来,这不仅仅是一道面试题,而是工作中确实有实用的技能。

那么 SpringBoot Starter 为什么会如此受欢迎呢,接着往下看

二、SpringBoot Starter 为什么如此受欢迎

在开发 SpringBoot 项目的时候,随处可见 Starter 的身影,现在几乎所有的中间件都以 Starter 的方式集成到 SpringBoot 的应用中。现在已经形成了一个庞大的生态。

自定义的或者第三方的 Starter 命名推荐: module−spring−boot−starter,而SpringBoot官方的Starter则更多采用spring−boot−starter−{module}-spring-boot-starter , 而 SpringBoot 官方的 Starter 则更多采用 spring-boot-starter-modulespringbootstarter,而SpringBoot官方的Starter则更多采用springbootstarter{module} 的模式。

2.1 随处可见的 Starter

Spring Boot 提供了许多官方的 Starter,用于支持各种集成和开发场景。如下所示:

starter描述
spring-boot-starter核心 starter,包括自动配置支持、日志库和Spring核心功能
spring-boot-starter-web用于构建Web应用程序,包括RESTful应用程序,使用Spring MVC
spring-boot-starter-data-jpa包括Spring Data JPA与Hibernate的支持,用于数据库访问
spring-boot-starter-security用于添加Spring Security的支持
spring-boot-starter-data-redis使用Spring Data Redis和lettuce客户端访问Redis数据存储
..........

除去官方的,还有三方的 Starter,如下所示:

starter描述
mybatis-spring-boot-startermybatis快速集成 SpringBoot的
pagehelper-spring-boot-starter分页starter
..........

当然还有大量自建的 Starter。 那么 Starter 都有哪些优秀特性,才让它成为当前时代的 Java 编程语言的宠儿。

2.2 Starter 的优秀特性

第一节 为什么会是 SpringBoot Starter

高度模块化: Spring Boot Starter 是一种实现应用模块化、功能解耦的有效手段。通过将某一特定功能所需的依赖、配置和服务封装成一个独立的模块,使得开发者在引入该功能时只需简单地添加 Starter 依赖,无需关注底层复杂的配置和实现细节。

高度可扩展性:自定义 Starter 也具有良好的扩展性,可以根据需要随时添加新的功能或者调整已有功能,比如在多环境中,快速增加场景实现。

简化配置、快速集成: 大量中间件以 Starter 方式快速集成,简化了大量配置,使得 SpringBoot 应用开发变得异常简单;很多常见应用场景无需编写或仅需少量配置代码就能快速启动服务,极大地提高了开发效率。

可移植可复用:轻量简单,以 Jar 的方式,被传播和复用

Starter 是 SpringBoot 约定大于配置的优秀体现,简化了构建配置和依赖管理。

2.3 自定义 Starter 的场景

场景举例:

  1. 集成第三方服务:例如,为某个云服务商提供的消息队列服务创建一个 Starter,当应用需要接入该服务时,只需要引入这个 Starter 即可完成相关的客户端依赖、认证信息以及连接配置等步骤。

  2. 组织内部框架整合:如果公司内部有一些共用的基础组件或中间件,比如统一的日志框架、监控系统、权限管理模块等,可以将其封装成自定义 Starter,方便各项目快速复用和部署。

  3. 标准化项目初始化:针对特定类型的项目(如微服务项目、数据处理项目),可以创建一个包含基础环境搭建、安全设置、健康检查等功能的 Starter,确保每个新项目从一开始就遵循了最佳实践和一致的标准。

第一节 为什么会是 SpringBoot Starter

总的来说,Starter 容易使用, 它简化了依赖管理,实现了自动配置,增强了扩展性,对于使用者来讲,也降低了学习成本,总体而言, Spring Boot Starter 是一种促进模块化、解耦、易用性和高效开发的重要工具。

三、Starter 与工具包的区别

第一节 为什么会是 SpringBoot Starter

Spring Boot Starter 和工具包(库)在 Java 项目开发中都扮演重要的角色,但它们的目的和应用方式有所不同并各有特点。理解这两者之间的区别有助于更合理地组织和构建应用程序。

Spring Boot Starter: 是一种特殊类型的 Maven 项目或 Gradle 项目依赖,简化 Spring 应用的初始搭建和配置工作。Starter 包含了一组自动配置的预设,依赖库和其他必需的配置,使得开发者能够快速启动和运行一个特定的功能或模块,无需从头开始手动配置所有细节;以解决特殊的场景为目的,并依赖 Spring,内部的各个类相互协助以对外提供能力。

工具包或库(Library) :是封装了一组特定功能的代码和资源的集合,旨在被其他项目作为依赖引入,以提供特定的功能或服务,由一系列 util 类组成。与 Starter 相比,库更加专注于实现特定的功能,并不涉及项目的自动配置,工具包中可以互相独立,不相互协作对外提供功能。

在实际开发中,Starter 和工具包通常会一起使用。通过合理选择和使用 Starter 和工具包,可以大大提高项目的开发效率,减少重复的配置工作,同时保证项目的可维护性和可扩展性。

四、最后小结

本章讲了三个小故事,然后谈到了 Starter 的特性和应用场景,以及和工具包之间的区别。 Starter 有着优秀 feature 以及广泛的应用场景,值得我们认真学习和深入研究。下面将开启 Starter 的学习之旅。

转载自:https://juejin.cn/post/7371641316113825828
评论
请登录