如何理解 Spring Boot 中的 Starter ?
假如 没有 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=\
xx.xx.xx.xx.xx.MyConfiguration
spring boot 会根据文件中配置的自动化配置类来自动初始化相关的 Bean、Component 或 Service。
03、配置自动配置类
编写自动配置类,这些类将在Spring应用程序中自动配置starter。自动配置类应该有一个@Configuration注解,并且应该包含可以覆盖的默认值,以允许用户自定义配置。在自动配置类中,可以使用@ConditionalOnClass、@ConditionalOnMissingBean等条件注解,以便只有在需要的情况下才会配置 starter。
3 开源 springboot starter 学习项目
项目地址:
rocketmq-spring 的本质是一个 Spring Boot starter , 项目的源码设计 :
每一年,我都会给自己制定读书计划,一定要读完两到三本技术书籍,并做好笔记。
与此同时,十年的编程时光里,我也积累了很多的电子书籍,有些书写得非常经典,分享给各位。
这些电子书 我已经打包好了 ,下载地址是:
一:Linux 书籍:
- Linux 0.0.1 内核分析与操作系统
- Linux 内核设计的艺术
二:Java 书籍:
- 分布式java应用技术与实践 (分布式启蒙书)
- 大型网站系统与Java中间件实战 (中间件启蒙书)
- Alibaba Sentine 流控
- nacos 配置中心
- 重构
- Netty in Action
三:数据结构:
- Java数据结构和算法
- 编程珠玑
- 算法导论
- leetcode go 算法书
四:数据库:
- MySQL技术内幕
- 数据库系统概念