Spring:SpringBoot Starter 工作原理详解

一、前言

  通过使用Spring Boot Starter,开发人员可以避免手动查找和添加每个所需的库,从而大大简化了项目的依赖管理。这些starter不仅包含了库依赖,还可能包含自动配置,从而减少了开发人员需要编写的配置代码。

  本文将分析Spring Boot Starter的主要作用,最后通过代码实战手写一个Spring Boot Starter来演示如何自定义自己的starter

二、概述

  Spring Boot Starter包含了实现特定功能所需的所有依赖的库,从而简化了Maven或Gradle等构建配置。每个starter都遵循特定的命名规则,通常是spring-boot-starter-{name},其中{name}表示特定的功能或组件。

  由于SpringBoot官方本身就提供了很多Starter,为了区别那些是官方的,哪些是第三方的,所以SpringBoot官方提出:
  第三方提供的Starter统一用xxx-spring-boot-starter。
  而官方提供的Starter统一用spring-boot-starter-xxx。

三、Spring Boot Starter主要作用

2.1. 对比spring

  在SpringBoot出现之前,如果我们想使用SpringMVC来构建我们的web项目,必须要做的几件事情如下:

  ①. 首先项目中需要引入SpringMVC的依赖

  ②. 在web.xml中注册SpringMVC的DispatcherServlet,并配置url映射

  ③. 编写springmcv-servlet.xml,在其中配置SpringMVC中几个重要的组件,处理映射器(HandlerMapping)、处理适配器(HandlerAdapter)、视图解析器(ViewResolver)

  ④. 在applicationcontext.xml文件中引入springmvc-servlet.xml文件

  ⑤. 以上这几步只是配置好了SpringMVC,如果我们还需要与数据库进行交互,就要在application.xml中配置数据库连接池DataSource,如果需要数据库事务,还需要配置TransactionManager…

在导入的starter之后,SpringBoot主要帮我们做了什么事情:

1. 原理:

  Spring Boot Starter的原理主要基于自动配置和依赖管理

  当在项目中引入某个Starter依赖时,Spring Boot会根据该Starter的定义自动配置相应的组件和库,而无需开发人员手动进行繁琐的配置。

  这得益于Spring Boot的自动配置机制,它会自动扫描项目中的依赖,并根据依赖信息自动配置Spring容器和相关的bean。

2. 主要作用:

①. 简化依赖管理:通过引入预定义的依赖项集合,开发人员可以一次性添加多个相关的依赖,而无需手动查找和添加每个单独的依赖。这大大简化了项目的依赖管理过程。

②. 自动配置:Spring Boot Starter包含了一些自动配置的类和配置文件,能够根据项目的需要自动配置Spring Boot应用程序的各种组件。这减少了开发人员需要手动编写的配置代码量,降低了开发和维护的工作量。

③. 约定优于配置:Spring Boot Starter遵循“约定优于配置”的原则,提供了一种标准的配置方式。这意味着开发人员只需要按照Starter的要求进行配置,即可获得默认的配置和功能。当需要定制化配置时,也可以通过覆盖默认配置来实现。

④. 扩展性:Spring Boot还提供了扩展机制,允许开发人员根据特定业务需求或技术栈需求创建自定义的Starter。这使得Spring Boot Starter更加灵活和可定制。

  总的来说,Spring Boot Starter通过简化依赖管理和配置工作,使开发人员能够更快速地构建和部署Spring Boot应用程序,提高了开发效率和项目的可维护性。

四、自定义Spring Boot Starter

1. 创建一个新的Maven项目
  首先,你需要创建一个新的Maven项目。你可以使用IDE(如IntelliJ IDEA或Eclipse)来创建,或者手动创建pom.xml文件。

2. 定义Maven依赖项
  在pom.xml中,你需要添加Spring Boot的依赖项以及任何你的starter需要的库。

<dependencies>
    <!-- 添加Spring Boot Starter依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-autoconfigure</artifactId>
        <version>${spring-boot.version}</version>
    </dependency>
    
    <!-- 添加其他必要的依赖项 -->
    <!-- ... -->
</dependencies>

<!-- ... 其他配置 ... -->
确保替换${spring-boot.version}为实际的Spring Boot版本。

3. 创建自动配置类
  在你的starter项目中,你需要创建自动配置类。这些类通常使用@Configuration和@EnableConfigurationProperties注解,并且可能会包含@Bean方法来创建和配置beans。

package com.demo.config;

import com.demo.service.MyService;
import com.demo.service.MyServiceImpl;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@EnableAutoConfiguration
public class MyAutoConfiguration {

    @Bean
    @ConditionalOnClass(MyService.class)
    @ConditionalOnMissingBean
    public MyService myService() {
        return new MyServiceImpl();
    }
}

在这里插入图片描述

4. 创建spring.factories文件
  在src/main/resources/META-INF目录下创建一个spring.factories文件。该文件告诉Spring Boot在自动配置过程中包含哪些配置类。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.demo.config.MyAutoConfiguration

确保每行末尾没有空格,并且使用\来分隔多个配置类(如果有的话)。

在这里插入图片描述

5. 构建并发布Starter
  使用Maven构建你的starter项目,并将生成的JAR文件发布到Maven仓库(可能是私有的或公共的)。
mvn clean install

在这里插入图片描述

6. 在其他项目中使用Starter
  现在,你可以在其他Spring Boot项目中使用你的starter了。只需将starter作为依赖项添加到该项目的pom.xml文件中。

<dependency>
    <groupId>com.example</groupId>
    <artifactId>my-spring-boot-starter</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

在这里插入图片描述

注意事项
  1.确保你的starter遵循良好的命名约定,通常遵循{name}-spring-boot-starter的格式。

  2.使用条件注解(如@ConditionalOnClass、@ConditionalOnMissingBean等)来控制何时应用你的自动配置。

  3.编写清晰的文档,说明starter的功能、如何配置以及如何使用。

  4.考虑为你的starter添加测试,以确保它按预期工作。

  这些步骤提供了一个基本的框架来创建Spring Boot Starter。根据你的具体需求,你可能需要添加更多的自动配置逻辑、属性绑定以及与其他库的集成。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值