【Spring Boot 入门一】构建你的第一个Spring Boot应用
一、引言
在当今的软件开发领域,Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸,为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程,让开发者能够专注于业务逻辑的实现。无论是构建小型的微服务还是大型的企业级应用,Spring Boot都能发挥巨大的作用。想象一下,你可以在短时间内搭建起一个功能完备、可运行的Java应用,并且无需繁琐的配置,这将大大提高开发效率,减少开发周期。这就是Spring Boot的魅力所在,也是我们深入学习它的原因。
二、环境搭建
(一)安装Java开发环境(JDK)
- Windows系统下JDK安装步骤
- 首先,访问Oracle官方网站或者OpenJDK官方网站,下载适合你Windows系统版本(32位或64位)的JDK安装包。例如,如果你使用的是64位Windows 10系统,可以下载JDK 11的64位版本。
- 下载完成后,双击安装包,按照安装向导的提示进行安装。在安装过程中,可以选择安装路径,建议使用默认路径或者选择一个容易记忆且不包含中文和特殊字符的路径,如“C:\Program Files\Java\jdk - 11”。
- 安装完成后,需要配置环境变量。右键点击“此电脑”,选择“属性”,然后点击“高级系统设置”。在“系统属性”窗口中,点击“环境变量”按钮。在“系统变量”中找到“Path”变量,点击“编辑”。在变量值的末尾添加“;C:\Program Files\Java\jdk - 11\bin”(这里的路径是根据你安装JDK的实际路径而定)。
- Linux系统下JDK安装步骤
- 对于基于Debian或Ubuntu的系统,可以使用命令行安装OpenJDK。打开终端,输入以下命令:
sudo apt - update
:更新软件包列表。sudo apt - install openjdk - 11 - jdk
:安装OpenJDK 11。
- 对于基于Red Hat或CentOS的系统,可以使用yum命令安装。例如:
yum install java - 11 - openjdk - devel
。
- 安装完成后,可以通过在终端输入
java - version
命令来验证JDK是否安装成功。
- 对于基于Debian或Ubuntu的系统,可以使用命令行安装OpenJDK。打开终端,输入以下命令:
(二)选择集成开发环境(IDE)
- Eclipse
- Eclipse是一个开源的、功能强大的Java集成开发环境。它具有丰富的插件生态系统,可以满足各种开发需求。例如,对于Web开发,可以安装Eclipse Web Tools Platform(WTP)插件。Eclipse的界面布局简洁明了,对于初学者来说比较容易上手。它的代码编辑功能强大,支持代码自动补全、语法检查等功能。
- IntelliJ IDEA
- IntelliJ IDEA是一款商业的Java开发工具,也有社区版可供免费使用。它以智能的代码编辑功能而闻名,例如,它能够根据上下文自动推断代码的意图,提供非常精准的代码补全建议。它对Spring Boot项目有很好的支持,在创建、运行和调试Spring Boot应用时非常方便。
- 以IntelliJ IDEA为例,基本配置如下:
- 下载并安装IntelliJ IDEA社区版或者旗舰版。安装完成后,打开IntelliJ IDEA。
- 在首次启动时,可以选择导入已有的项目或者创建新项目。对于Spring Boot项目,我们后续会详细介绍创建过程。
- 在设置中,可以配置JDK的路径。点击“File”->“Project Structure”,在“SDKs”选项卡中添加JDK的安装路径。
三、创建第一个Spring Boot项目
(一)使用Spring Initializr创建项目
- 访问Spring Initializr网站
- Spring Initializr是一个在线的工具,用于快速创建Spring Boot项目的基础结构。可以通过访问https://start.spring.io/来使用它。
- 选择项目依赖(如Web、Actuator等)
- 在Spring Initializr的页面上,有很多配置选项。首先,选择项目的构建工具,Maven或者Gradle。这里我们以Maven为例。
- 然后选择项目的语言为Java,Spring Boot的版本(可以选择较新的稳定版本,如2.5.x)。
- 在“Dependencies”(依赖)部分,添加“Web”依赖。这将为我们的项目添加Spring Web相关的库,使得我们能够构建Web应用,例如创建RESTful API。如果想要添加应用的监控功能,可以添加“Actuator”依赖。
- 下载项目压缩包并导入IDE
- 完成配置后,点击“Generate”按钮,Spring Initializr会生成一个包含项目基础结构的压缩包。
- 将下载的压缩包解压到本地磁盘的一个目录中。然后在IntelliJ IDEA中,选择“File”->“Open”,找到解压后的项目目录,点击“OK”来导入项目。
(二)项目结构分析
- 主程序类的作用
- 在Spring Boot项目中,有一个主程序类,通常带有
@SpringBootApplication
注解。例如:
package com.example.demo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);} }
- 这个注解是一个组合注解,它包含了
@Configuration
、@EnableAutoConfiguration
和@ComponentScan
等注解。@Configuration
表示这个类是一个配置类,可以在其中定义Bean等配置信息;@EnableAutoConfiguration
会自动根据项目的依赖和配置进行自动配置,例如,如果添加了Web依赖,它会自动配置Web相关的组件;@ComponentScan
会扫描指定包及其子包下的带有@Component
、@Service
、@Repository
等注解的类,并将它们注册为Spring容器中的Bean。
- 在Spring Boot项目中,有一个主程序类,通常带有
- 介绍资源文件夹(resources)中的配置文件
- 在
resources
文件夹下,有一个application.properties
或者application.yml
文件(如果没有添加其他配置文件的话)。这些文件用于配置Spring Boot应用的各种属性,如服务器端口、数据库连接等。例如,在application.properties
中可以设置服务器端口为8081:
server.port = 8081
- 在
- 说明包结构和类的组织方式
- 在项目中,通常按照功能模块来组织包结构。例如,可以有
com.example.demo.controller
包用于存放控制器类,com.example.demo.service
包用于存放服务类,com.example.demo.repository
包用于存放数据访问层的类。这样的组织方式使得项目结构清晰,便于维护和扩展。
- 在项目中,通常按照功能模块来组织包结构。例如,可以有
四、编写第一个简单的API
(一)创建一个简单的RESTful API
- 使用
@RestController
注解创建控制器类- 在
com.example.demo.controller
包下创建一个名为HelloController
的类,代码如下:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RestController;@RestController public class HelloController { }
@RestController
注解是一个组合注解,它包含了@Controller
和@ResponseBody
注解。@Controller
表示这个类是一个控制器类,用于处理HTTP请求;@ResponseBody
表示方法的返回值将直接作为HTTP响应体返回,而不是作为视图名进行解析。
- 在
- 编写一个简单的方法返回固定字符串
- 在
HelloController
类中添加一个方法:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController public class HelloController {@RequestMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";} }
- 这里的
@RequestMapping
注解用于将HTTP请求映射到这个方法上。当客户端发送一个GET请求到/hello
路径时,这个方法就会被调用,并返回“Hello, Spring Boot!”这个字符串。
- 在
- 讲解
@RequestMapping
注解的基本用法@RequestMapping
注解可以用在类和方法上。当用在类上时,它表示这个类中的所有方法的请求路径都将以这个类上的@RequestMapping
注解的值为前缀。例如:
package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RequestMapping("/api") public class HelloController {@RequestMapping("/hello")public String sayHello() {return "Hello, Spring Boot!";} }
- 此时,
sayHello
方法对应的请求路径是/api/hello
。@RequestMapping
注解还可以指定请求方法(如GET、POST等),例如:
@RequestMapping(value = "/hello", method = RequestMethod.POST)
- 这表示这个方法只处理POST请求到
/hello
路径的情况。
(二)运行项目并测试API
- 在IDE中运行Spring Boot项目
- 在IntelliJ IDEA中,可以直接点击主程序类中的
main
方法旁边的绿色运行按钮来运行项目。项目启动后,可以在控制台看到启动日志,其中包含了应用启动的相关信息,如服务器启动在哪个端口等。
- 在IntelliJ IDEA中,可以直接点击主程序类中的
- 使用Postman或浏览器测试API
- 如果使用浏览器测试,可以在浏览器的地址栏中输入
http://localhost:8080/hello
(如果没有修改服务器端口的话),就可以看到浏览器显示“Hello, Spring Boot!”。 - 如果使用Postman测试,可以打开Postman,创建一个新的GET请求,输入
http://localhost:8080/hello
作为请求地址,然后点击“Send”按钮,在响应体中就可以看到“Hello, Spring Boot!”这个结果。
- 如果使用浏览器测试,可以在浏览器的地址栏中输入
五、深入理解自动配置
(一)什么是Spring Boot自动配置
- 解释自动配置的概念和原理
- Spring Boot的自动配置是其核心特性之一。它基于条件注解(如
@Conditional
系列注解)来根据项目的依赖和环境自动配置Spring容器中的Bean。例如,当项目中添加了spring - web
依赖时,Spring Boot会自动配置一个嵌入式的Web服务器(如Tomcat),并且配置相关的Servlet、Filter等组件。 - 原理上,Spring Boot在启动时会扫描类路径下的各种配置类和Bean定义。对于自动配置类,它们会根据条件判断是否需要进行配置。这些条件可以基于类是否存在、环境变量是否设置、配置文件中的属性是否满足等。例如,有一个自动配置类可能会检查类路径下是否存在某个数据库驱动类,如果存在,则会自动配置数据库连接相关的Bean。
- Spring Boot的自动配置是其核心特性之一。它基于条件注解(如
- 举例说明自动配置如何简化开发
- 假设我们要创建一个简单的Web应用,在传统的Spring开发中,我们需要手动配置一个Web服务器,如Tomcat。这包括创建
Tomcat
实例,配置端口号,设置Servlet上下文等一系列复杂的操作。而在Spring Boot中,只需要添加spring - web
依赖,Spring Boot就会自动配置好一个嵌入式的Tomcat服务器,并且默认将服务器端口设置为8080。我们可以直接编写业务逻辑代码,无需关心Web服务器的底层配置。
- 假设我们要创建一个简单的Web应用,在传统的Spring开发中,我们需要手动配置一个Web服务器,如Tomcat。这包括创建
(二)查看自动配置的生效情况
- 使用
@Conditional
相关注解的例子- 我们可以创建一个自定义的自动配置类来演示。首先创建一个名为
MyAutoConfiguration
的类:
package com.example.demo.config;import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.context.annotation.Configuration;@Configuration @ConditionalOnClass(name = "javax.servlet.Servlet") public class MyAutoConfiguration {// 这里可以定义一些Bean或者配置信息 }
- 这个自动配置类使用了
@ConditionalOnClass
注解,它表示只有当类路径下存在javax.servlet.Servlet
类时,这个自动配置类才会生效。
- 我们可以创建一个自定义的自动配置类来演示。首先创建一个名为
- 在日志中查看自动配置的加载信息
- 在项目启动时,可以在控制台的启动日志中查看自动配置的加载情况。Spring Boot会打印出哪些自动配置类被加载了,哪些被排除了(如果有)。例如,可以看到类似这样的日志:
o.s.b.a.autoconfigure.web.servlet.WebMvcAutoConfiguration : WebMvcAutoConfiguration matched: - @ConditionalOnClass found required classes 'javax.servlet.Servlet', 'org.springframework.web.servlet.DispatcherServlet' (OnClassCondition)
- 这表示
WebMvcAutoConfiguration
这个自动配置类被加载了,并且满足了@ConditionalOnClass
注解的条件。
六、总结与展望
在这篇文章中,我们从Spring Boot的环境搭建开始,包括JDK的安装和IDE的选择,然后使用Spring Initializr创建了第一个Spring Boot项目,并详细分析了项目的结构。接着编写了一个简单的RESTful API,深入理解了@RestController
和@RequestMapping
等注解的用法,还运行项目并进行了API测试。最后,我们深入探讨了Spring Boot的自动配置特性,包括其概念、原理、示例以及如何查看自动配置的生效情况。通过这些内容,大家应该对Spring Boot有了一个初步的认识和理解。在下一篇文章中,我们将深入探讨Spring Boot中的配置文件,包括不同类型的配置文件、自定义配置属性以及配置文件与不同环境的关系等内容,进一步深入Spring Boot的世界。
相关文章:

【Spring Boot 入门一】构建你的第一个Spring Boot应用
一、引言 在当今的软件开发领域,Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸,为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程,让开发者能够专注于业务逻辑的实现。无论是构建小型的…...

PPT 快捷键使用、技巧
前言: 本文操作是以office 2021为基础的,仅供参考;不同版本office 的 ppt 快捷键 以及对应功能会有差异,需要实践出真知。 shift 移动 水平/垂直 移动 ; shift 放大/缩小 等比例放大 缩小 ; 正圆 正…...

Web安全 - 文件上传漏洞(File Upload Vulnerability)
文章目录 OWASP 2023 TOP 10导图定义攻击场景1. 上传恶意脚本2. 目录遍历3. 覆盖现有文件4. 文件上传结合社会工程攻击 防御措施1. 文件类型验证2. 文件名限制3. 文件存储位置4. 文件权限设置5. 文件内容检测6. 访问控制7. 服务器配置 文件类型验证实现Hutool的FileTypeUtil使用…...

vue3中el-input在form表单按下回车刷新页面
摘要: 在input框中点击回车之后不是调用我写的回车事件,而是刷新页面! 如果表单中只有一个input 框则按下回车会直接关闭表单 所以导致刷新页面 再写一个input 表单 ,并设置style“display:none” <ElInput style"display…...

SQL Server中关于个性化需求批量删除表的做法
在实际开发中,我们常常会遇到需要批量删除表,且具有共同特征的情况,例如:找出表名中数字结尾的表之类的,本文我将以3中类似情况为例,来示范并解说此类需求如何完成: 第一种,批量删除…...

关于按键状态机解决Delay给程序带来的问题
问题产生 我在学习中断的过程中,使用EXTI15外部中断,在其中加入HAL_Delay();就会发生报错 错误地方 其它地方配置 问题原因 在中断服务例程(ISR)中使用 HAL_Delay() 会导致问题的原因是: 阻塞性: HAL_D…...

62.【C语言】浮点数的存储
目录 1.浮点数的类型 2.浮点数表示的范围 3.浮点数的特性 《计算机科学导论》的叙述 4.浮点数在内存中的存储 答案速查 分析 前置知识:浮点数的存储规则 推导单精度浮点数5.5在内存中的存储 验证 浮点数取出的分析 1.一般情况:E不全为0或不全为1 2.特殊情况:E全为0…...

GO网络编程(一):基础知识
1. 网络编程的基础概念 TCP/IP 协议栈 TCP/IP 是互联网通信的核心协议栈,分为以下四个层次: 应用层(Application Layer):为应用程序提供网络服务的协议,比如 HTTP、FTP、SMTP 等。传输层(Tra…...

【Linux】用虚拟机配置Ubuntu环境
目录 1.虚拟机安装Ubuntu系统 2.Ubuntu系统的网络配置 3.特别声明 首先我们先要下载VMware软件,大家自己去下啊! 1.虚拟机安装Ubuntu系统 我们进去之后点击创建新的虚拟机,然后选择自定义 接着点下一步 再点下一步 进入这个界面之后&…...

酒店智能门锁SDK接口pro[V10] 门锁校验C#-SAAS本地化-未来之窗行业应用跨平台架构
一、代码 int 酒店标识_int Convert.ToInt32(酒店标识);StringBuilder 锁号2024 new StringBuilder(8);//信息 "未知返回值:" bufCard_原始;GetGuestLockNoByCardDataStr_原始(酒店标识_int, bufCard_原始.ToString(), 锁号2024);StringBuilder 退…...
Gitのrebase用法
在 Git 中,rebase 是一种用于整合多个提交历史的操作,它可以将一个分支的变更“重放”到另一个分支上。与 merge 不同,rebase 会产生一个线性的提交历史,使得项目的历史记录更加整洁和易于理解。 1. 什么是 Rebase? …...

二分查找一>:在排序数组中查找元素的第一个和最后一个位置
1.题目: 2.解析:这里不能用传统二分,因为涉及范围,传统二分时间复杂度会降为O(N),要做些改动。 步骤一:查找区间左端点 细节图: 步骤二:查找区间右端点: 细节图: 代码…...

undeclared identifier ‘UNITY_PREV_MATRIX_M‘ - Unity Shader自己写URP,引用内部 hlsl
碰到这样的问题,居然非常淡定 这个链接里说了问题: 一个哥们A问,为什么include urp common.hlsl 提示莫名其妙 另一个哥们B说,这个issue 说了,可能是这个原因(也没正面答) 从issue我们知道&a…...

信息安全工程师(29)存储介质安全分析与防护
前言 存储介质安全分析与防护是确保数据安全与完整性的重要环节。存储介质,如硬盘、U盘、SD卡等,作为数据的载体,其安全性直接关系到数据的安全。 一、存储介质安全分析 1. 数据泄露风险 格式化不彻底:传统的格式化操作往往只能删…...
Html5知识点介绍
HTML5 是 HTML 的最新版本,它引入了许多新特性和元素来增强 Web 开发的能力和灵活性。以下是一些关键的 HTML5 知识点: 1. 语义化标签 HTML5 增加了许多新的语义化标签,用来更好地定义页面结构和内容,这些标签使代码更加清晰易读&…...
探索机器学习中的特征选择技术
在机器学习和数据科学领域,特征选择是一个关键步骤,它不仅有助于提高模型的性能,还能帮助我们更好地理解数据。本文将深入探讨特征选择的重要性、常见方法以及如何在实际项目中应用这些技术。 一、特征选择的重要性 降低维度:减…...

数造科技入选中国信通院《高质量数字化转型产品及服务全景图》三大板块
9月24日,2024大模型数字生态发展大会暨“铸基计划”年中会议在北京召开。会上,中国信通院发布了2024年《高质量数字化转型产品及服务全景图(上半年度)》和《高质量数字化转型技术解决方案(上半年度)》等多项…...
什么是分布式数据库
分布式数据库(Distributed Database)是一种数据库系统,它的数据被存储在不同的物理位置,但对用户来说表现得就像一个单一的、统一的数据库。这种系统由多个自治的数据库站点组成,这些站点通过网络相互连接,…...

从u盘直接删除的文件能找回吗 U盘文件误删除如何恢复
U盘上的文件被删除并不意味着它们立即消失。事实上,删除操作只是将文件从文件系统的目录中移除,并标记可用空间。这意味着在文件被覆盖之前,它们仍然存在于存储介质上。因此,只要文件没有被新的数据覆盖,我们就有机会恢…...

如何使用ssm实现基于HTML的中国传统面食介绍网站的搭建+vue
TOC ssm758基于HTML的中国传统面食介绍网站的搭建vue 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。随着电脑和笔…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...

MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
今日科技热点速览
🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...
C++八股 —— 单例模式
文章目录 1. 基本概念2. 设计要点3. 实现方式4. 详解懒汉模式 1. 基本概念 线程安全(Thread Safety) 线程安全是指在多线程环境下,某个函数、类或代码片段能够被多个线程同时调用时,仍能保证数据的一致性和逻辑的正确性…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

Reasoning over Uncertain Text by Generative Large Language Models
https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...