【gopher的java学习笔记】Spring Boot Starter初探
转到java这边后,这天需要搭一个java的web service出来,如果是以前golang的话,那我就可以非常熟练的用gin搭建一个web service出来,核心逻辑就是写好一些rest接口实现后再加上最为灵魂的一句:
// 启动Gin服务器在8080端口router.Run(":8080")
那来到java这边,我第一反应也是类似的,实现一些接口后去显式地通过某行代码监听某个端口。
可是学习了一下后,我发现事情并不是这样的,因为它变得更简单了,那就是直接声明一下spring boot的starter为web就行,这样spring就会以默认的配置(比如端口为8080),以tomcat为核心启动一个web service。
那这个spring boot starter到底是怎么一回事呢?
Spring Boot Starter是Spring Boot框架中的一个重要概念,它旨在简化项目的依赖管理和配置,提高开发效率。以下是对Spring Boot Starter的详细解释:
1. 定义与作用
- 定义:Spring Boot Starter是一组便捷的依赖描述符,它们封装了特定技术或功能的所有必要依赖项和配置。通过引入相应的Starter,开发者可以快速将这些功能集成到Spring Boot项目中。
- 作用:Spring Boot Starter的主要作用是简化项目的依赖管理和配置工作。它通过将常用的库和框架打包成一个starter,并提供默认的配置,使得开发者只需关注业务逻辑的实现,而无需花费大量时间在依赖管理和配置上。
2. 特性与优势
- 一站式依赖:Spring Boot Starter包含了特定技术或功能所需的所有依赖项,开发者无需手动添加这些依赖。
- 自动配置:Spring Boot Starter提供了自动配置功能,能够根据项目的依赖和环境自动配置相应的Bean和组件,减少了手动配置的工作量。
- 模块化:Spring Boot Starter将复杂的功能模块化,开发者可以根据需要选择引入不同的starter,实现灵活的功能组合。
- 简化开发:通过引入Spring Boot Starter,开发者可以快速搭建项目骨架,专注于业务逻辑的实现,提高了开发效率。
3. 常见的Spring Boot Starters
Spring Boot提供了多种开箱即用的Starter,用于不同场景的开发,包括但不限于:
- Spring Boot Starter Web:用于构建Web应用程序,包含了Spring MVC、Tomcat等依赖。
- Spring Boot Starter Data JPA:用于集成JPA数据库,提供了ORM映射、事务管理等功能。
- Spring Boot Starter Test:用于测试Spring Boot应用程序,包含了JUnit、Mockito等依赖。
- Spring Boot Starter AMQP:用于集成消息队列,支持RabbitMQ等消息中间件。
4. 自定义Spring Boot Starter
除了使用Spring Boot提供的官方Starter外,开发者还可以根据需要自定义Starter。自定义Starter的步骤如下:
- 创建项目结构:创建一个新的Maven或Gradle项目,并设置合适的项目结构。
- 配置依赖:在项目的构建文件中添加必要的依赖项,包括Spring Boot的自动配置依赖等。
- 编写自动配置类:定义一个或多个自动配置类,使用@Configuration和@EnableConfigurationProperties等注解来声明配置属性和Bean。
- 创建资源文件:在项目的资源目录下创建META-INF/spring.factories文件,并指定自动配置类的路径。
- 打包与发布:将项目打包成jar文件,并发布到Maven或Gradle仓库中,以便在其他项目中使用。
5. 使用Spring Boot Starter
在Spring Boot项目中使用Starter非常简单,只需在项目的构建文件中添加相应的Starter依赖即可。例如,要使用Spring Boot Starter Web,只需在pom.xml中添加以下依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
添加依赖后,Spring Boot会自动扫描到该starter,并加载相应的配置和依赖项,开发者即可开始使用Web相关的功能了。
6. 注意事项
- 版本兼容性:在引入Spring Boot Starter时,需要确保其与Spring Boot的版本兼容。
- 自动配置的优先级:Spring Boot的自动配置机制允许开发者通过配置文件或注解来覆盖默认配置。在自定义配置时,需要注意配置的优先级和顺序。
- 性能优化:虽然Spring Boot Starter提供了自动配置和一站式依赖管理等便捷功能,但在大型项目中,过度依赖自动配置可能会影响应用的性能。因此,开发者需要根据项目需求进行适当的性能优化。
相关文章:
【gopher的java学习笔记】Spring Boot Starter初探
转到java这边后,这天需要搭一个java的web service出来,如果是以前golang的话,那我就可以非常熟练的用gin搭建一个web service出来,核心逻辑就是写好一些rest接口实现后再加上最为灵魂的一句: // 启动Gin服务器在8080端…...
web服务器之云主机、物理机租用、服务器托管的区别
云主机、物理机租用和服务器托管是三种不同的Web服务器部署方式,它们各有特点,适用于不同需求的用户。以下是这三种服务的区别: 云主机(Cloud Hosting): 资源分配:基于虚拟化技术,多…...

centos制作离线安装包
目录 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve repotrack 总结 2.环境准备 3.安装 1.yumdownloader与repotrack怎么选择? yumdownloader --resolve 和 repotrack 都是与 YUM(Yellowdog Updater Modified…...

论文解读——掌纹生成网络 RPG-Palm升级版PCE-Palm
该文章是2023年论文RPG-Palm的升级版 论文:PCE-Palm: Palm Crease Energy Based Two-Stage Realistic Pseudo-Palmprint Generation 作者:Jin, Jianlong and Shen, Lei and Zhang, Ruixin and Zhao, Chenglong and Jin, Ge and Zhang, Jingyun and Ding,…...

Android修行手册 - 移动端几种常用动画方案对比
Unity3D特效百例案例项目实战源码Android-Unity实战问题汇总游戏脚本-辅助自动化Android控件全解手册再战Android系列Scratch编程案例软考全系列Unity3D学习专栏蓝桥系列ChatGPT和AIGC 👉关于作者 专注于Android/Unity和各种游戏开发技巧,以及各种资源分…...

16 循环语句——for循环
#字符串是可以进行迭代的 for 循环: for 变量 in 可迭代的东西: 代码 把可迭代的东西中的每一项内容拿出来,挨个的赋值给变量,每一次的赋值都要执行一次循环体(代码) s "你好呀,我叫赛利…...

代码随想录-笔记-其八
让我们开始:动态规划! 70. 爬楼梯 - 力扣(LeetCode) 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢? class Solution { public:int climbStairs(i…...
Effective C++ 条款 15:在资源管理类中提供对原始资源的访问
文章目录 条款 15:在资源管理类中提供对原始资源的访问核心思想原始资源的访问方式标准库中的实现示例设计建议总结 条款 15:在资源管理类中提供对原始资源的访问 核心思想 为什么需要访问原始资源? 在使用 RAII(Resource Acquis…...

Linux高并发服务器开发 第五天(压缩解压缩/vim编辑器/查找替换/分屏操作/vim的配置)
目录 1.压缩和解压缩 1.1压缩 1.2解压缩 2.vim编辑器 2.1vim的3种工作模式 2.2切换编辑模式 2.3保存和退出 2.4光标移动 2.5复制粘贴 2.6剪切、删除 2.7查找 替换 2.7.1查找 2.7.2替换 3.分屏操作 3.1快速翻屏 3.2分屏 4.vim的配置 4.1系统配置 4.2用户配置…...
C++ 面向对象编程:关系运算符重载、函数调用运算符重载
对 、<、> 三个运算符分别进行重载,可见以下代码: #include<iostream> using namespace std;class location { public:location(int x1, int y1) :x(x1), y(y1){};bool operator(const location& l1) const{return x l1.x && …...
拉普拉斯分布极大似然估计
在拉普拉斯分布中,概率密度函数 (PDF) 表示为: f ( x ∣ μ , b ) 1 2 b exp ( − ∣ x − μ ∣ b ) , f(x | \mu, b) \frac{1}{2b} \exp\left(-\frac{|x - \mu|}{b}\right), f(x∣μ,b)2b1exp(−b∣x−μ∣), 其中 μ \mu μ 是位置参数&…...

VLMs之Gemma 2:PaliGemma 2的简介、安装和使用方法、案例应用之详细攻略
VLMs之Gemma 2:PaliGemma 2的简介、安装和使用方法、案例应用之详细攻略 导读:2024年12月4日,PaliGemma 2是一个基于Gemma 2系列语言模型的开源视觉语言模型 (VLM) 家族。PaliGemma 2 通过提供一个规模化、多功能且开源的VLM家族,…...

qwenvl 代码中的attention pool 注意力池如何理解,attention pool注意力池是什么?
qwenvl 中的attention pool如何理解,其实这就是一个概念的问题 看qwenvl的huggingface的代码的时候,发现代码里有一个Resampler 以及attn_pool,这和之前理解的连接池 线程池 表示资源复用的意思不太一样,查了一下: 注…...
源码分析之Openlayers中GeometryCollection类
概述 本文主要介绍GeometryCollection类,GeometryCollection类继承于Geometry类,关于Geometry类,参考这篇文章源码分析之Openlayers中Geometry基类介绍 GeometryCollection类就是一组几何对象的集合. 源码分析 GeometryCollection类源码实现 GeometryCollection类源码实现…...
常见LLM大模型总结
常见LLM大模型总结 模型名称发布机构主要特点参数规模应用场景GPT-4OpenAI强大的推理能力,支持多模态(图像文本),上下文理解更深1.7万亿参数聊天机器人、内容生成、代码生成ChatGPTOpenAI面向对话优化,支持多轮对话记…...

向量检索+大语言模型,免费搭建基于专属知识库的 RAG 智能助手
随着生成式人工智能技术的飞速发展,越来越多的人和企业开始应用AI到日常的工作和生活中。但公域的AI助手其数据来自互联网上的大量公开文本,虽然具有广泛的知识,但在面对一些特定领域的专业问题时,可能会出现回答不够准确或深入的…...

基础11C++中的异常处理以及swap
一、异常处理手段 抛出异常:throw 异常 作用:让调用者看见这个异常,如果调用者不理睬,就让调用者的调用者看见 接住异常: try {可能异常的code} catch(异常类型) {处理方式} 异常类型:一般为const &,防…...
写作词汇积累:得偿所望、可见一斑、搭腔
得偿所望 【得偿所望】是指经过长时间的期盼和努力,最终实现了自己的愿望或目标。 【得偿所望】强调了愿望实现后的满足感和成就感,是一个充满正能量和积极情感的词语。 【得偿所望】与【得偿所愿】在表达上也具有相似的含义,都指愿望得到了…...
android jetpack compose Model对象更新变量 UI不更新、不刷新问题
以前是搞老本行Android原生开发的,因为工作原因,一直在用vue小程序;因为一些工作需要,又需要用到Android原生开发,建了个项目,打开源码一看,天塌了!!!我以前的…...

数据库概论
目录 1、数据库管理系统(DBMS) 1.1 DBMS的主要功能 1. 数据库的定义功能 2. 数据库的操纵功能 3. 数据库的运行控制功能 4. 数据库的维护 5. 数据字典(Data Dictionary,DD) 2、数据模型 2.1 信息和数据(了解) 2.2 数据模型的三个层次 2.3 信息世界中的基…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...
Kubernetes 网络模型深度解析:Pod IP 与 Service 的负载均衡机制,Service到底是什么?
Pod IP 的本质与特性 Pod IP 的定位 纯端点地址:Pod IP 是分配给 Pod 网络命名空间的真实 IP 地址(如 10.244.1.2)无特殊名称:在 Kubernetes 中,它通常被称为 “Pod IP” 或 “容器 IP”生命周期:与 Pod …...
【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统
Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

ui框架-文件列表展示
ui框架-文件列表展示 介绍 UI框架的文件列表展示组件,可以展示文件夹,支持列表展示和图标展示模式。组件提供了丰富的功能和可配置选项,适用于文件管理、文件上传等场景。 功能特性 支持列表模式和网格模式的切换展示支持文件和文件夹的层…...
webpack面试题
面试题:webpack介绍和简单使用 一、webpack(模块化打包工具)1. webpack是把项目当作一个整体,通过给定的一个主文件,webpack将从这个主文件开始找到你项目当中的所有依赖文件,使用loaders来处理它们&#x…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...

leetcode73-矩阵置零
leetcode 73 思路 记录 0 元素的位置:遍历整个矩阵,找出所有值为 0 的元素,并将它们的坐标记录在数组zeroPosition中置零操作:遍历记录的所有 0 元素位置,将每个位置对应的行和列的所有元素置为 0 具体步骤 初始化…...
结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案
以下是一个结合PDE反应扩散方程与物理信息神经网络(PINN)进行稀疏数据预测的技术方案,包含完整数学推导、PyTorch/TensorFlow双框架实现代码及对比实验分析。 基于PINN的反应扩散方程稀疏数据预测与大规模数据泛化能力研究 1. 问题定义与数学模型 1.1 反应扩散方程 考虑标…...