如何理解SpringBoot中的Starter?

博客 动态
0 159
优雅殿下
优雅殿下 2023-05-12 00:54:59
悬赏:0 积分 收藏

如何理解 Spring Boot 中的 Starter ?

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

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

1 spring API 来创建 Spring Bean

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

  1. 创建 Bean 类:创建一个普通的 Java 类,定义需要注入的属性、构造函数、以及方法。
  2. 在类上添加注解:使用 Spring 的注解将该类声明为一个 Bean。可以使用 @Component、@Service、@Repository、@Controller 等注解,这些注解都被 Spring 识别为 Bean。
  3. 配置 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 学习项目


项目地址:

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

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

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


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

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

img

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

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技术内幕
  • 数据库系统概念
posted @ 2023-05-12 00:33  勇哥编程游记  阅读(0)  评论(0编辑  收藏  举报
回帖
    优雅殿下

    优雅殿下 (王者 段位)

    2012 积分 (2)粉丝 (47)源码

    小小码农,大大世界

     

    温馨提示

    亦奇源码

    最新会员