Spring Boot 中的 Starter 是什么?如何创建自定义 Starter?

news2024/12/28 5:03:48

Spring Boot 中的 Starter 是什么?如何创建自定义 Starter?

Spring Boot 是一个快速构建应用程序的框架,它提供了一种简单的方式来快速启动和配置 Spring 应用程序。Spring Boot Starter 是 Spring Boot 的一个重要概念,它可以帮助开发者快速集成各种功能模块,从而提高开发效率。本文将介绍 Spring Boot Starter 的概念、使用方法以及如何创建自定义 Starter。

在这里插入图片描述

Spring Boot Starter 是什么?

Spring Boot Starter 是一组预定义的依赖项集合,它们可以帮助开发者快速集成各种功能模块,例如 Web 应用程序、数据库访问、消息队列等。这些 Starter 可以减少开发者的配置工作,使得开发者可以更加专注于业务逻辑的实现。

Spring Boot Starter 的命名规则是以 spring-boot-starter- 开头,后面跟着模块的名称,例如 spring-boot-starter-webspring-boot-starter-data-jpa 等。当开发者在项目中引入了这些 Starter 时,它们会自动配置相应的依赖项和默认属性,以便开发者可以立即开始使用这些功能模块。

例如,如果我们想要在 Spring Boot 应用程序中使用 Spring MVC,只需要在项目中添加 spring-boot-starter-web 依赖项,Spring Boot 会自动配置 Tomcat 服务器和 Spring MVC 框架,并提供默认的 Web 应用程序配置。这样我们就可以快速地启动一个 Web 应用程序了。

如何创建自定义 Starter?

除了使用 Spring Boot 提供的 Starter 外,我们还可以创建自定义 Starter,以便在开发中能够更加方便地使用自己开发的功能模块。

创建自定义 Starter 需要遵循一定的规则,包括 Maven 项目结构、依赖项配置、自动配置类等。

Maven 项目结构

创建自定义 Starter 需要使用 Maven 项目结构,结构如下:

my-starter
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └──my-starter
├── src
│   ├── main
│   │   ├── java
│   │   │   └── com
│   │   │       └── example
│   │   │           └── mystarter
│   │   │               ├── MyStarterAutoConfiguration.java
│   │   │               └── MyStarterService.java
│   │   └── resources
│   │       └── META-INF
│   │           └── spring.factories
│   └── test
│       └── java
│           └── com
│               └── example
│                   └── mystarter
│                       └── MyStarterServiceTest.java
└── pom.xml

其中,MyStarterAutoConfiguration.java 是自动配置类,负责将自定义 Starter 中的服务注入到 Spring 容器中;MyStarterService.java 是自定义 Starter 中的服务实现;spring.factories 是 Spring Boot 自动装配的核心配置文件,用于声明自动配置类。

依赖项配置

创建自定义 Starter 还需要配置相关的依赖项,以便在使用 Starter 的项目中能够自动引入相关依赖项。

pom.xml 文件中,我们需要引入 spring-boot-starter 父级依赖,以及其他需要依赖的模块。例如,如果我们的自定义 Starter 需要使用 Spring MVC 框架,我们需要添加以下依赖项:

<dependencies>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <version>2.5.0</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.5.0</version>
    <scope>compile</scope>
  </dependency>
</dependencies>

自动配置类

创建自定义 Starter 的核心是编写自动配置类,它负责将自定义 Starter 中的服务注入到 Spring 容器中。自动配置类需要使用 @Configuration@ConditionalOnClass 注解,以便在满足一定条件时才被加载。

例如,以下是一个简单的自动配置类示例:

@Configuration
@ConditionalOnClass(MyStarterService.class)
public class MyStarterAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public MyStarterService myStarterService() {
        return new MyStarterService();
    }
}

在这个自动配置类中,我们使用 @ConditionalOnClass 注解来判断是否存在 MyStarterService 类。如果存在,则加载这个自动配置类。@Bean 注解表示将 MyStarterService 注入到 Spring 容器中,@ConditionalOnMissingBean 注解表示如果 Spring 容器中已经存在同名的 Bean,则不进行注入。

打包

完成自定义 Starter 的编写后,我们需要将其打包成一个 jar 包,以便在其他项目中使用。

使用 Maven 进行打包的命令如下:

mvn clean package

打包完成后,我们可以将生成的 jar 包上传到 Maven 仓库中,以便其他项目进行引用。

引入自定义 Starter

在其他项目中使用自定义 Starter 非常简单,只需要在项目的 pom.xml 文件中添加以下依赖项即可:

<dependencies>
  <dependency>
    <groupId>com.example</groupId>
    <artifactId>my-starter</artifactId>
    <version>1.0.0</version>
  </dependency>
</dependencies>

其中,com.example 是自定义 Starter 的 groupId,my-starter 是自定义 Starter 的 artifactId,1.0.0 是自定义 Starter 的版本号。

引入自定义 Starter 后,我们就可以使用其中提供的服务了。例如,如果我们在自定义 Starter 中提供了一个 MyStarterService 服务,我们可以在其他项目中通过注入这个服务来使用它:

@RestController
public class MyController {
    @Autowired
    private MyStarterService myStarterService;

    @GetMapping("/hello")
    public String hello() {
        return myStarterService.sayHello();
    }
}

示例代码

以下是一个简单的自定义 Starter 示例代码,它提供了一个 MyStarterService 服务,用于输出一句问候语。这个自定义 Starter 的 artifactId 是 my-starter

MyStarterService.java

package com.example.mystarter;

public class MyStarterService {
    public String sayHello() {
        return "Hello from MyStarterService!";
    }
}

MyStarterAutoConfiguration.java

package com.example.mystarter;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
importorg.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Conditional;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;

@Configuration
@ConditionalOnClass(MyStarterService.class)
public class MyStarterAutoConfiguration {
    @Bean
    @ConditionalOnMissingBean
    public MyStarterService myStarterService() {
        return new MyStarterService();
    }
}

spring.factories

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
  com.example.mystarter.MyStarterAutoConfiguration

pom.xml

<project>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>my-starter</artifactId>
  <version>1.0.0</version>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter</artifactId>
      <version>2.5.0</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

总结

Spring Boot Starter 是 Spring Boot 的一个重要概念,它可以帮助开发者快速集成各种功能模块,从而提高开发效率。在使用 Spring Boot Starter 的过程中,开发者只需要添加相应的依赖项,就可以快速地启动一个应用程序,并使用其中提供的服务。

同时,对于一些特定的业务需求,开发者也可以创建自定义 Starter,以便在开发中更加方便地使用自己开发的功能模块。创建自定义 Starter 需要遵循一定的规则,包括 Maven 项目结构、依赖项配置、自动配置类等。通过自定义 Starter,开发者可以将自己开发的功能模块封装成一个独立的模块,以便在其他项目中进行复用。

在本文中,我们介绍了 Spring Boot Starter 的概念、使用方法以及如何创建自定义 Starter。同时,我们也提供了一个简单的自定义 Starter 示例代码,帮助开发者更好地理解如何创建自定义 Starter。希望本文能够对开发者们在使用 Spring Boot Starter 和创建自定义 Starter 方面提供帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/562242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机网络详细笔记(四)网际控制报文协议ICMP

文章目录 4.网际控制报文协议ICMP4.1.ICMP报文的种类4.2.ICMP应用举例 4.网际控制报文协议ICMP 网际控制报文协议概述&#xff1a;&#xff1a; 作用&#xff1a;更有效地转发IP数据报和提高交付成功的机会。原理&#xff1a;允许主机或路由器报告差错情况和提供有关异常情况…

maven_SSM项目如何实现验证码功能

验证码的作用 防止恶意注册&#xff0c;自动化程序批量注册。防止暴力破解。 1、这里我们使用goole的验证码生成器 由于直接在maven中引入依赖&#xff0c;没有找到。所以只能直接去下载jar包了。 链接&#xff1a;https://pan.baidu.com/s/1KANhJKI4sQCfkiroTVr0WA?pwd29iv …

Oracle数据库环境变量配置修改数据库密码

1.设置环境变量&#xff1a; 必须设置环境变量才可以用CMD命令访问Oracle数据库 1.1.首先找到你Oracle安装位置路径 C:\app\Administrator\product\11.2.0\dbhome_1 1.2.设置环境变量 1.2.1 设置Adimistrator变量 变量名&#xff1a; ORACLE_HOME 变量值&#xff1a;C:\app…

嵌入式学习之Linux驱动(第九期_设备模型_教程更新了)_基于RK3568

驱动视频全新升级&#xff0c;并持续更新~更全&#xff0c;思路更科学&#xff0c;入门更简单。 迅为基于iTOP-RK3568开发板进行讲解&#xff0c;本次更新内容为第九期&#xff0c;主要讲解设备模型&#xff0c;共计29讲。视频选集 0.课程规划 06:35 1.抛砖引玉-设备模型…

K8s in Action 阅读笔记——【3】Pods: running containers in Kubernetes

K8s in Action 阅读笔记——【3】Pods: running containers in Kubernetes 3.1 Introducing pods 在Kubernetes中&#xff0c;Pod是基本构建块之一&#xff0c;由容器集合组成。与独立部署容器不同&#xff0c;你总是要部署和操作一个Pod。Pod并不总是包含多个容器&#xff0…

Python数据分析案例28——西雅图交通事故预测(不平衡样本处理)

本次案例适合机器学习数据科学方向的同学。 引言(废话集) 交通事故是一个严重的公共安全问题&#xff0c;在全球范围内每年都有成千上万的人死于交通事故。随着交通运输的发展和城市化进程的加速&#xff0c;交通事故已成为制约城市发展和人民幸福的主要因素之一。因此&#x…

【蓝桥杯选拔赛真题57】Scratch计数游戏 少儿编程scratch图形化编程 蓝桥杯选拔赛真题讲解

目录 scratch计数游戏 一、题目要求 编程实现 二、案例分析 1、角色分析

Java版本企业电子招标采购系统源码:营造全面规范安全的电子招投标环境,促进招投标市场健康可持续发展

营造全面规范安全的电子招投标环境&#xff0c;促进招投标市场健康可持续发展 传统采购模式面临的挑战 一、立项管理 1、招标立项申请 功能点&#xff1a;招标类项目立项申请入口&#xff0c;用户可以保存为草稿&#xff0c;提交。 2、非招标立项申请 功能点&#xff1a;非招标…

设计模式之【解释器模式】,用语言定义一门语言

文章目录 一、什么是解释器模式1、常见文法&#xff08;语法&#xff09;规则2、抽象语法树3、解释器模式的使用场景4、解释器模式的四大角色5、解释器模式优缺点 二、实例1、解释器模式的一般写法2、数学表达式案例 三、源码中的解释器模式1、Pattern正则2、Spring的Expressio…

jupyter notebook零散操作整理

1 修改Jupyter Notebook打开路径 1.1 永久修改 jupyter notebook --generate-config 打开相应的.py文件&#xff0c;修改c.NotebookApp.notebook_dir 1.2 临时修改 .切换到需要的临时目录&#xff0c;打开jupyter notebook 2 使用Matplotlib绘图时输出矢量图 %config Inli…

MT4期货软件怎么使用?有哪些MT4期货软件使用知识?

现在MT4软件在投资市场上应用广泛&#xff0c;当然也包括期货交易市场&#xff0c;但有不少投资者不知道为什么一定要选择MT4期货软件&#xff0c;其实选择MT4期货软件的理由有很多&#xff0c;MT4作为一款交易软件&#xff0c;不仅能够为投资者提供准确的市场信息&#xff0c;…

PyQt5实现父窗口内点击按钮显示子窗口(窗口嵌套功能)

摘要&#xff1a;在软件中&#xff0c;常会有点击某个按钮&#xff0c;显示一个新的子界面的需求&#xff0c;本文介绍如何在PyQt5中实现这一功能&#xff0c;主要涉及知识点是“信号与槽函数的自动绑定”。 程序说明&#xff1a; 1.开发环境&#xff1a;win10系统&#xff0c…

【C++】C++11线程库 和 C++IO流

春风若有怜花意&#xff0c;可否许我再少年。 文章目录 一、C11线程库1.thread类介绍2.mutex互斥锁 和 CAS原子操作&#xff08;compare and set&#xff09;3.lock_guard和unique_lock4.两个线程交替打印&#xff0c;一个打印奇数&#xff0c;一个打印偶数&#xff08;线程同步…

Java前缀和算法

一.什么是前缀和算法 通俗来讲&#xff0c;前缀和算法就是使用一个新数组来储存原数组中前n-1个元素的和&#xff08;如果新数组的当前元素的下标为n&#xff0c;计算当前元素的值为原数组中从0到n-1下标数组元素的和&#xff09;&#xff0c;可能这样讲起来有点抽象&#xff0…

题解 . 洛谷题单之动态规划的引入

前置知识&#xff1a; 数字三角形问题&#xff1a;动态规划之数字三角形模型_如何何何的博客-CSDN博客 01背包问题&#xff1a;动态规划之01背包模型_如何何何的博客-CSDN博客 完全背包问题&#xff1a;动态规划之完全背包模型_如何何何的博客-CSDN博客 多重背包问题&#…

两种蚁狮群优化(Ant Lion Optimizer, ALO)实现及仿真实验——附代码

目录 蚁狮群优化算法介绍&#xff1a; 总结概括&#xff1a; ALO算法设计&#xff1a; 1.觅食的蚂蚁随机行走 2.设置陷阱 3.设置陷阱诱捕蚂蚁 4.捕获猎物重建洞穴 多目标MOALO算法 两种蚁狮算法求解效果 (1) ALO (2) MOALO Matlab代码分享&#xff1a; 蚁狮群优化算…

CleanMyMac X4.13.5中文版Mac电脑优化软件

CleanMyMac X4.13.5是一款Mac电脑优化软件&#xff0c;旨在提高Mac电脑的性能、稳定性和安全性。它可扫描您的Mac电脑&#xff0c;并删除不需要的文件、清理缓存、卸载不必要的应用程序、优化启动项、检测并删除恶意软件等。此外&#xff0c;它还可以帮助您管理您的文件&#x…

Python库 pdf2docx 轻松将PDF转换成docx

前言&#xff1a; 可将 PDF 转换成 docx 文件的 Python 库。该项目通过 PyMuPDF 库提取 PDF 文件中的数据&#xff0c;然后采用 python-docx 库解析内容的布局、段落、图片、表格等&#xff0c;最后自动生成 docx 文件。 pdf2docx功能 解析和创建页面布局 页边距章节和分栏 (目…

腾讯云-服务违规封禁提醒解决

腾讯云-服务违规封禁提醒解决 背景解决方案Step1: 查看目标主机上有哪些TCP链接在使用22端口以及该进程的详细信息Step2&#xff1a;删除异常进程&#xff0c;及其可执行文件Step3&#xff1a;处理已经挂起的链接Step4&#xff1a;查看是否存在相关的定时任务Step5&#xff1a;…

vue - 大文件分片上传之simple-uploader.js的使用

vue - 大文件分片上传之simple-uploader.js的使用 分片上传的思路前端文件切片常见的写法后端常见的写法 关于大文件上传 关于单个文件上传&#xff1a;其实就是前端中的文件通过http传到后端&#xff0c;后端再写入服务器的过程 那单个大文件分片上传&#xff1a;其实就是前…