如何理解 Spring Boot 中的 Starter ?

2023-06-15,,

假如 没有 Spring Boot Starter,我们有两种方式来创建 Spring Bean。

spring xml 模式 (远古模式,并不推荐)
spring API 来创建 Spring Bean

1 spring API 来创建 Spring Bean

接下来通过 Spring 的基础 API 来创建 Spring Bean。

    创建 Bean 类:创建一个普通的 Java 类,定义需要注入的属性、构造函数、以及方法。
    在类上添加注解:使用 Spring 的注解将该类声明为一个 Bean。可以使用 @Component、@Service、@Repository、@Controller 等注解,这些注解都被 Spring 识别为 Bean。
    配置 Bean:可以通过 Java 配置类使用 使用 @Configuration 和 @Bean 注解配置 Bean。

下面是一个示例代码片段:

// Bean 类
public class MyService {
private MyDao myDao; public MyService(MyDao myDao) {
this.myDao = myDao;
} public void doSomething() {
// do something with myDao
}
} // Bean 配置类
@Configuration
public class MyConfig {
@Bean
public MyService myService(MyDao myDao) {
return new MyService(myDao);
} @Bean
public MyDao myDao() {
return new MyDao();
}
}

在上面的示例中,我们定义了一个名为 MyService 的 Bean,它依赖 MyDao。我们使用 @Configuration 注解来定义配置类,并使用 @Bean 注解来定义 Bean。在 myService() 方法中,我们使用构造函数注入 MyDao。

可以看出,即使没有 Spring Boot Starter,使用 Spring 基础 API 来创建 Bean 比较容易,但还是需要创建相关的配置类

2 约定大于配置

Spring Boot 基于“约定大于配置”(Convention over configuration)这一理念来快速地开发、测试、运行和部署 Spring 应用,并能通过简单地与各种启动器(如 spring-boot-web-starter)结合,让应用直接以命令行的方式运行,不需再部署到独立容器中。

Spring Boot starter 构造的启动器使用起来非常方便,开发者只需要在 pom.xml 引入 starter 的依赖定义,在配置文件中编写约定的配置即可。

因此常用的开源组件都会为 Spring 的用户提供一个 spring-boot-starter 封装给开发者,让开发者非常方便集成和使用。

spring-boot-starter 实现流程如下:

01、定创建starter项目,定义 Spring 自身的依赖包和 Bean 的依赖包 ;

02、定义spring.factories 文件

在 resources 包下创建 META-INF 目录后,新建 spring.factories 文件,并在文件中定义自动加载类,文件内容是:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.apache.spring.autoconfigure.MyConfiguration

spring boot 会根据文件中配置的自动化配置类来自动初始化相关的 Bean、Component 或 Service。

03、配置自动配置类

编写自动配置类,这些类将在Spring应用程序中自动配置starter。自动配置类应该有一个@Configuration注解,并且应该包含可以覆盖的默认值,以允许用户自定义配置。在自动配置类中,可以使用@ConditionalOnClass、@ConditionalOnMissingBean等条件注解,以便只有在需要的情况下才会配置 starter。

3 开源 springboot starter 学习项目

项目地址:

https://github.com/apache/rocketmq-spring

rocketmq-spring 的本质是一个 Spring Boot starter , 项目的源码设计 :

https://mp.weixin.qq.com/s/CxKmKqkMwKfVZLsf8TPKlQ


每一年,我都会给自己制定读书计划,一定要读完两到三本技术书籍,并做好笔记。

与此同时,十年的编程时光里,我也积累了很多的电子书籍,有些书写得非常经典,分享给各位。

这些电子书 我已经打包好了 ,下载地址是:

https://mp.weixin.qq.com/s/WHK7HNyaeM2cQTpJZiTuJQ

一:Linux 书籍:

Linux 0.0.1 内核分析与操作系统
Linux 内核设计的艺术

二:Java 书籍:

分布式java应用技术与实践 (分布式启蒙书)
大型网站系统与Java中间件实战 (中间件启蒙书)
Alibaba Sentine 流控
nacos 配置中心
重构
Netty in Action

三:数据结构:

Java数据结构和算法
编程珠玑
算法导论
leetcode go 算法书

四:数据库:

MySQL技术内幕
数据库系统概念

如何理解 Spring Boot 中的 Starter ?的相关教程结束。

《如何理解 Spring Boot 中的 Starter ?.doc》

下载本文的Word格式文档,以方便收藏与打印。