文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Springboot Starter 是如何工作的?

2024-11-29 19:29

关注

实现原理

1. 依赖管理

Springboot Starter 是通过 Maven 或 Gradle 的依赖管理来实现的。一个 Starter 通常是一个 Maven 依赖(或 Gradle 依赖),它本身并不包含功能代码,而是引入了一组相关的依赖。

例如,spring-boot-starter-web 会引入 Spring MVC、Tomcat 等必要的依赖。

2. 自动配置

Springboot 的核心特性之一是自动配置(Auto-Configuration)。通过使用 @EnableAutoConfiguration 注解,Springboot 可以根据类路径中的依赖、Java Bean 定义和其他属性来自动配置 Spring 应用程序。具体的自动配置逻辑是通过一系列 spring.factories 文件来定义的,这些文件位于各个 jar 包的 META-INF 目录下,列出了自动配置类。

3. 条件注解

自动配置类通常使用一系列的条件注解(如@ConditionalOnClass,@ConditionalOnMissingBean,@ConditionalOnProperty等)来控制配置逻辑是否生效。这些条件注解确保只有在满足特定条件时,相关的配置才会应用。

为了更好的说明 starter机制,我们通过一个示例来展示它是如何工作的。

(1) 引入依赖

这里以 Maven 项目为例,在pom.xml文件中,添加如下依赖:


   org.springframework.boot
   spring-boot-starter-web

spring.factories 文件是 Springboot 用于实现自动配置(Auto-Configuration)的一种机制。它位于每个 jar 包的 META-INF 目录下,并且遵循特定的格式来声明各种自动配置类和其他组件。以下是如何配置 spring.factories 文件的详细说明。

(2) 创建配置类

首先,创建一个自动配置类。例如,MyAutoConfiguration:

package com.example.autoconfig;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyAutoConfiguration {

    @Bean
    public MyService myService() {
        return new MyService();
    }
}

(3) 配置 spring.factories

在 src/main/resources/META-INF 目录下创建 spring.factories 文件,并添加如下内容:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.example.autoconfig.MyAutoConfiguration

spring.factories 文件是一个简单的键值对文件,使用 = 号分隔键和值,多个值用逗号分隔。通常使用 org.springframework.boot.autoconfigure.EnableAutoConfiguration 作为键来指定自动配置类。

以下是一个完整示例,包括项目结构和文件内容:

my-spring-boot-starter
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── autoconfig
│   │   │               ├── MyAutoConfiguration.java
│   │   │               └── MyService.java
│   │   └── resources
│   │       └── META-INF
│   │           └── spring.factories
├── pom.xml

(4) 使用自定义 Starter

在另一个 Springboot 应用中引入这个自定义 Starter:

pom.xml


    com.example
    my-spring-boot-starter
    1.0.0

优缺点

优点:

缺点:

Springboot Starter 的设计思维体现了多种软件工程和设计模式的原则,主要包括以下几个方面:

Springboot starter 的设计思维?

Springboot starter 主要体现了下面 6 种设计思维:

(11) 模块化设计

Springboot Starters 将复杂的功能模块化,提供了一组预定义的依赖和配置。这种模块化设计使得开发者可以根据需求选择和组合不同的 Starters,从而简化了项目的依赖管理。

(2) 约定优于配置

Springboot 推崇“约定优于配置(Convention over Configuration)”的原则,即通过合理的默认配置减少开发者的配置工作。Starters 通过提供合理的默认依赖和自动配置,大大减少了开发者手动配置的工作量。

(3) 自动配置

自动配置(Auto-Configuration)是 Springboot 的核心特性之一。它基于条件注解(如 @ConditionalOnClass, @ConditionalOnMissingBean, @ConditionalOnProperty 等)实现,根据类路径中的依赖、Java Bean 定义和其他属性自动配置 Spring 应用程序。这种设计减少了样板代码,提升了开发效率。

(4) 依赖注入

Spring 框架的核心特性之一是依赖注入(Dependency Injection,DI)。Starters 和自动配置类通过 DI 来管理和注入依赖对象,使得组件之间的耦合度更低,增强了代码的可测试性和可维护性。

(5) 开闭原则

开闭原则(Open/Closed Principle)是面向对象设计的五大原则之一,指的是软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。Springboot 通过提供一系列可扩展的自动配置类,允许开发者在不修改框架本身的情况下进行扩展和自定义。

(6) 单一职责原则

每个 Starter 都专注于提供一种特定的功能或一组相关的功能。例如,spring-boot-starter-web 专注于 Web 应用的开发,而 spring-boot-starter-data-jpa 专注于 JPA 数据访问。这种设计符合单一职责原则,使得每个模块的职责更加明确。

总结

总结来说,Springboot Starter 通过简化依赖管理和自动配置,大大提高了开发效率,其中也包含了很多优秀的设计思维,但是,在日常开发中,我们也需要注意其潜在的缺点和局限性。

来源:猿java内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯