重学SpringBoot3-自定义starter

news2024/9/26 14:54:13

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》
期待您的点赞👍收藏⭐评论✍

重学SpringBoot3-自定义starter

  • 1. 什么是 Spring Boot Starter?
    • Starter 的优势
  • 2. Spring Boot 3 中的改进
  • 3. 常见的 Starter 示例
    • 3.1. 使用 Web Starter 构建 Web 应用
    • 3.2. 使用 Data JPA Starter 集成数据库
  • 4. 自定义 Starter 示例
    • 4.1. 创建自定义的 Spring Boot Starter
    • 4.2. AutoConfiguration 类
    • 4.3. `spring.factories` 文件
    • 4.4. 使用自定义 Starter
    • 4.5. 验证
  • 5. 结论

Spring Boot 简化了基于 Spring Framework 的应用程序开发,Spring Boot 的核心功能之一就是 Starter,它极大简化了项目的依赖管理和配置,帮助开发者快速启动项目。而在 Spring Boot 3 中,Starter 仍然是一个至关重要的组件,并进行了很多改进和增强。

本文将深入介绍 Spring Boot 3 中的 Starter,解释其原理、作用,并通过实例展示如何自定义和使用 Starter。

1. 什么是 Spring Boot Starter?

Spring Boot Starter 是一组有针对性的 Maven 或 Gradle 依赖项,用于快速集成特定的技术栈。例如,spring-boot-starter-web 提供了构建 Web 应用程序所需的常见依赖项,如 Spring MVC 和嵌入式 Tomcat。开发者只需引入对应的 Starter 依赖,就可以免去手动配置大量的依赖和初始化代码。

Spring Boot 提供了各种开箱即用的 Starter,用于不同场景的开发,包括:

  • Web 开发: spring-boot-starter-web
  • JPA 数据库: spring-boot-starter-data-jpa
  • 测试: spring-boot-starter-test
  • 消息队列: spring-boot-starter-amqp

Starter 的优势

  1. 简化依赖管理: 开发者无需记住每个组件的具体版本,Spring Boot Starter 将常用组件以兼容的版本打包在一起。
  2. 自动配置: 通过 Spring Boot 的自动配置机制,Starter 帮助我们自动配置项目所需的 Bean 和组件。
  3. 提升开发效率: 通过引入 Starter,可以避免大量手动配置,提高开发效率。

2. Spring Boot 3 中的改进

Spring Boot 3 在 Starter 机制上延续了之前版本的特点,同时引入了一些新的特性:

  1. Java 17 支持:Spring Boot 3 要求使用 Java 17,Starter 也适配了最新的 Java 版本,提升了性能和安全性。
  2. AOT 优化:Spring Boot 3 引入了 AOT(Ahead-of-Time)编译,部分 Starter 可以利用 AOT 优化,提高应用程序的启动速度和内存利用率。
  3. 增强的 Native Image 支持:Spring Boot 3 加强了对 GraalVM Native Image 的支持,部分 Starter(如 Web Starter 和 Data JPA Starter)已经优化用于构建原生镜像。

3. 常见的 Starter 示例

3.1. 使用 Web Starter 构建 Web 应用

首先,来看看如何使用 spring-boot-starter-web 快速构建一个简单的 Web 应用。

Maven 配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

控制器示例

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String sayHello() {
        return "Hello, Spring Boot 3!";
    }
}

通过引入 spring-boot-starter-web,我们得到了 Spring MVC 和 Tomcat 的默认配置。运行这个应用后,可以直接访问 http://localhost:8080/hello,得到简单的返回结果。

3.2. 使用 Data JPA Starter 集成数据库

接下来,我们展示如何通过 spring-boot-starter-data-jpaH2 数据库快速集成一个简单的数据库应用。

Maven 配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <scope>runtime</scope>
</dependency>

实体类和仓库接口

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;

@Entity
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private String name;

    // Getter 和 Setter 省略
}
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
}

服务类和控制器

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserRepository userRepository;

    @GetMapping
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @PostMapping
    public User createUser(@RequestBody User user) {
        return userRepository.save(user);
    }
}

通过引入 spring-boot-starter-data-jpa,Spring Boot 自动为我们配置了 JPA 和 H2 数据库,无需额外的手动配置。

4. 自定义 Starter 示例

有时,我们可能需要开发自己的 Starter,以便在多个项目中复用公共的配置和依赖。下面是创建自定义 Starter 的简单示例。

4.1. 创建自定义的 Spring Boot Starter

首先,我们创建一个名为 spring-boot3-09-starter 的 Maven 项目。项目结构如下:

spring-boot3-09-starter
│
├── src/main/java/com/coderjia/boot309starter/config/MyAutoConfiguration.java
├── src/main/java/com/coderjia/boot309starter/MyService.java
├── src/main/resources/META-INF/spring.factories
└── pom.xml

项目结构

根据需要添加依赖,这里只添加spring-boot-starter作为基础依赖:

pom文件

4.2. AutoConfiguration 类

package com.coderjia.boot309starter.config;

import com.coderjia.boot309starter.MyService;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author CoderJia
 * @create 2024/09/24 15:17
 * @Description
 **/
@Configuration
public class MyAutoConfiguration {

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

MyAutoConfiguration 类会在应用启动时自动加载,并将 MyService 类注册到 Spring 容器中。

MyService 类定义如下:

package com.coderjia.boot309starter;

/**
 * @author CoderJia
 * @create 2024/09/24 15:18
 * @Description
 **/
public class MyService {


    public void hello() {
        System.out.println("MyService hello!");
    }
}

4.3. spring.factories 文件

为了让 Spring Boot 自动扫描并加载我们的配置类,我们需要在 resources/META-INF/spring.factories 文件中声明:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.coderjia.boot309starter.config.MyAutoConfiguration

4.4. 使用自定义 Starter

在另一个项目中使用这个自定义 Starter 时,只需添加以下依赖:

		<dependency>
			<groupId>com.example</groupId>
			<artifactId>spring-boot3-09-starter</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>

这样一来,我们的 MyService 就会被自动注入,并可以直接在项目中使用。

4.5. 验证

package com.coderjia;

import com.coderjia.boot309starter.MyService;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author CoderJia
 * @create 2024/3/2 下午 03:24
 * @Description
 **/
@SpringBootApplication
public class MainApplication {
    public static void main(String[] args) {
        var applicationContext = SpringApplication.run(MainApplication.class, args);

        applicationContext.getBean("myService", MyService.class).hello();
    }
}

验证

5. 结论

Spring Boot 3 的 Starter 机制使得开发复杂的 Spring 应用变得非常简单和快捷。通过提供一组预定义的依赖和自动配置,它减少了开发者手动配置的负担,同时增强了应用的可扩展性。Spring Boot 3 不仅保持了这一机制的优良传统,还通过支持 Java 17 和 AOT 编译等新特性进一步优化了 Starter 的使用体验。

开发者也可以通过自定义 Starter 来封装和复用公共功能,进一步提高开发效率。

推荐实践

  • 在项目中尽量使用 Spring Boot 官方的 Starter,以获得最佳的兼容性和支持。
    rter 机制使得开发复杂的 Spring 应用变得非常简单和快捷。通过提供一组预定义的依赖和自动配置,它减少了开发者手动配置的负担,同时增强了应用的可扩展性。Spring Boot 3 不仅保持了这一机制的优良传统,还通过支持 Java 17 和 AOT 编译等新特性进一步优化了 Starter 的使用体验。

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

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

相关文章

华硕主板开启TPM 2.0

安装Windows11系统&#xff0c;需要打开TPM 安装 Windows 11 的方法 电脑健康状况检查应用验证最低系统要求 在电脑上启用 TPM 2.0 查看主板型号 winr msinfo32 查看 tpm 进入Advanced Mode&#xff08;F7&#xff09; 选择Security&#xff0c;进入Secure Boot&#xff0c;我…

echarts横向柱状图让Y轴的名字和数量在柱状图上方展示

效果图 let vm thisvm.chart2 echarts.init(this.$refs.chart2)let xDatas this.registerProjectType.map((item) > {let found data.find((countItem) > countItem.projectType item.label)return found ? found.count : 0})// 翻转数据让其他项目在最下面let xDa…

现场扫码实时投票打分显示最新现场大屏微信现场投票实时显示

现场投票“神器”超级好玩儿||现场参与者通过手机扫码进入投票系统&#xff0c;大屏幕实时显示投票排名&#xff0c;增加紧张和刺激感。可以随时截止投票&#xff0c;方便便捷&#xff0c;可设置 单票&#xff0c;多票&#xff0c;自由票&#xff0c;结合现场互动&#xff0c;增…

SEO全自动发布外链工具增加权重的网站工具源码系统 带源代码包以及搭建部署教程

系统概述 传统的手动发布外链方式不仅费时费力&#xff0c;而且效率低下。因此&#xff0c;开发一款能够全自动发布外链的工具成为了迫切的需求。SEO 全自动发布外链工具增加权重的网站工具源码系统正是在这样的背景下诞生的。它旨在为网站管理员提供一种便捷、高效的方式来增…

图论系列(dfs)9.25

一、主题空间 场地由若干主题空间与走廊组成&#xff0c;场地的地图记作由一维字符串型数组 grid&#xff0c;字符串中仅包含 "0"&#xff5e;"5" 这 6 个字符。地图上每一个字符代表面积为 1 的区域&#xff0c;其中 "0" 表示走廊&#xff0…

B站批量删除动态—Python

B站协议批量删除动态实现 b站登录协议请看点方蓝色字体 b站扫码登录协议 文章结尾附Python代码 一、抓包 1.1删除动态包 POST请求 https://api.bilibili.com/x/dynamic/feed/operate/remove?platformweb&csrf3bdb2bda73e3d6f75ea991167fb39389 请求表单数据{&quo…

基于python+django+vue的电影数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏&#xff1a;Java精选实战项目…

exebios提取工具通用exebios分离工具exe转编程器bios文件软件bios文件解密提取工具exe原厂bios提取烧录器bios芯片文件工具

好多电脑官网下载的BIOS文件是exe格式的特别是笔记本电脑&#xff0c;自己把电脑bios刷坏了黑屏不开机&#xff0c;需要用编程器刷BIOS&#xff0c;自然需要编程器版本的BIOS文件 需要把exe格式的BIOS文件转换成bin格式的编程器版本BIOS文件&#xff0c;转换需要用到一个小工具…

RAG技术全面解析:Langchain4j如何实现智能问答的跨越式进化?

LLM 的知识仅限于其训练数据。如希望使 LLM 了解特定领域的知识或专有数据&#xff0c;可&#xff1a; 使用本节介绍的 RAG 使用你的数据对 LLM 进行微调 结合使用 RAG 和微调 1 啥是 RAG&#xff1f; RAG 是一种在将提示词发送给 LLM 之前&#xff0c;从你的数据中找到并…

企业图纸文档管理系统推荐 三大企业图纸文档管理软件详细介绍

在现代企业的设计和生产过程中&#xff0c;图纸文档的管理是至关重要的一环。 无论是建筑、制造业&#xff0c;还是技术研发领域&#xff0c;图纸文档的正确存储、分享与管理能够极大提升工作效率&#xff0c;避免误操作或信息丢失。 接下来&#xff0c;小编将为大家推荐三款优…

8606 二叉树的构建及遍历操作

### 伪代码 1. **CreateBiTree**: - 读取一个字符 ch。 - 如果 ch 是 #&#xff0c;则当前节点为空。 - 否则&#xff0c;创建一个新节点 T&#xff0c;将 ch 赋值给 T 的数据域。 - 递归创建 T 的左子树。 - 递归创建 T 的右子树。 2. **PreOrderTraverse**: …

15 Midjourney从零到商用·实战篇:建筑设计与室内设计

以前设计师生成一张效果图需要先画草稿&#xff0c;导入三维软件搭建场景后&#xff0c;再用渲染器渲染&#xff0c;而现在只需要有客户的意向图或者自己想法&#xff0c;在MidJourney中就能一键生成惊艳的效果图。 “给我一个prompt我能撬动整个设计界”。设计师在AI绘画面前似…

安卓系统常见问题如native crash,卡顿卡死定位工具命令技巧-android framework实战开发

背景&#xff1a; 有学员朋友近来有问到一些安卓系统开发过程中的一些核心小技能小技巧等&#xff0c;比如native crash在企业里面该如何准确定位具体代码函数&#xff0c;程序卡住&#xff0c;或者长时间没反应&#xff0c;想要看看卡在代码的哪里。针对以上的一些问题&#…

中电金信:源启智能视觉分析系统~助力各行业破局升级,释放新质生产力

作为人工智能与计算机视觉的交叉范畴&#xff0c;智能视觉模仿人类视觉机能&#xff0c;来对各种形式的视觉输入予以处理、理解以及决策。当下&#xff0c;智能视觉已然发展为应用广泛、市场覆盖面大且形式多元的产业方向&#xff0c;获得了国家政策的强力支持。数字化时代搭台…

开源模型应用落地-qwen2.5-7b-instruct-LoRA微调-LLaMA-Factory-单机单卡-V100(十八)

一、前言 本篇文章将使用LLaMA-Factory去高效微调(命令和界面方式)QWen2.5系列模型,通过阅读本文,您将能够更好地掌握这些关键技术,理解其中的关键技术要点,并应用于自己的项目中。 QWen2系列模型微调: 开源模型应用落地-qwen2-7b-instruct-LoRA微调-LLaMA-Factory-单机单…

MySQL Mail服务器集成:如何配置发送邮件?

MySQL Mail插件使用指南&#xff1f;怎么优化 MySQL发邮件性能&#xff1f; MySQL Mail服务器的集成&#xff0c;使得数据库可以直接触发邮件发送&#xff0c;极大地简化了应用架构。AokSend将详细介绍如何配置MySQL Mail服务器&#xff0c;以实现邮件发送功能。 MySQL Mail&…

IDEA相关设置总结

目录 1.设置JDK 2.设置忽略大小写检查 3.设置字体大小 4.设置类的信息 5.包名分级 1.设置JDK 2.设置忽略大小写检查 3.设置字体大小 4.设置类的信息 5.包名分级 取消勾选

利用低代码快速搭建电商小程序之商品列表页

目标&#xff1a; 搭建商城的一个商品列表页面&#xff08;先做静态页&#xff09; 开发环境&#xff1a; 访问白码低代码平台&#xff1a;https://www.bnocode.com/ 白码的新自定义页功能&#xff08;使用vue框架&#xff09; 前期准备&#xff1a; 需要先准备商品数据表…

数据结构:Heap堆应用(堆排序,TOP-K问题)手把手带你入门数据结构~

文章目录 前言一、堆排序1. 数据入堆2. 堆排序3. 时间复杂度&#xff08;1&#xff09;冒泡排序时间复杂度&#xff08;2&#xff09;向上调整建堆的时间复杂度&#xff08;3&#xff09;向下调整建堆的时间复杂度 4. 堆排序总结 二、TOP-K问题1. TOP-K问题背景2. TOP-K问题解决…

【日记】感觉自己已经魔怔了(817 字)

正文 下午装档案的时候&#xff0c;无意间朝外看了一眼&#xff0c;发现自己视力衰退了好多。感觉两只眼睛都有散光了&#xff0c;看东西有重影。有些担心。 兄长血检报告出来了&#xff0c;血红蛋白高&#xff0c;肌酐低。尿酸倒是正常了&#xff0c;但总体还是偏高。我觉得好…