【Spring Boot 入门一】构建你的第一个Spring Boot应用

在这里插入图片描述

一、引言

在当今的软件开发领域,Java一直占据着重要的地位。而Spring Boot作为Spring框架的延伸,为Java开发者提供了一种更加便捷、高效的开发方式。它简化了Spring应用的搭建和配置过程,让开发者能够专注于业务逻辑的实现。无论是构建小型的微服务还是大型的企业级应用,Spring Boot都能发挥巨大的作用。想象一下,你可以在短时间内搭建起一个功能完备、可运行的Java应用,并且无需繁琐的配置,这将大大提高开发效率,减少开发周期。这就是Spring Boot的魅力所在,也是我们深入学习它的原因。

二、环境搭建

(一)安装Java开发环境(JDK)

  1. 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的实际路径而定)。
  2. 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是否安装成功。

(二)选择集成开发环境(IDE)

  1. Eclipse
    • Eclipse是一个开源的、功能强大的Java集成开发环境。它具有丰富的插件生态系统,可以满足各种开发需求。例如,对于Web开发,可以安装Eclipse Web Tools Platform(WTP)插件。Eclipse的界面布局简洁明了,对于初学者来说比较容易上手。它的代码编辑功能强大,支持代码自动补全、语法检查等功能。
  2. 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创建项目

  1. 访问Spring Initializr网站
    • Spring Initializr是一个在线的工具,用于快速创建Spring Boot项目的基础结构。可以通过访问https://start.spring.io/来使用它。
  2. 选择项目依赖(如Web、Actuator等)
    • 在Spring Initializr的页面上,有很多配置选项。首先,选择项目的构建工具,Maven或者Gradle。这里我们以Maven为例。
    • 然后选择项目的语言为Java,Spring Boot的版本(可以选择较新的稳定版本,如2.5.x)。
    • 在“Dependencies”(依赖)部分,添加“Web”依赖。这将为我们的项目添加Spring Web相关的库,使得我们能够构建Web应用,例如创建RESTful API。如果想要添加应用的监控功能,可以添加“Actuator”依赖。
  3. 下载项目压缩包并导入IDE
    • 完成配置后,点击“Generate”按钮,Spring Initializr会生成一个包含项目基础结构的压缩包。
    • 将下载的压缩包解压到本地磁盘的一个目录中。然后在IntelliJ IDEA中,选择“File”->“Open”,找到解压后的项目目录,点击“OK”来导入项目。

(二)项目结构分析

  1. 主程序类的作用
    • 在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。
  2. 介绍资源文件夹(resources)中的配置文件
    • resources文件夹下,有一个application.properties或者application.yml文件(如果没有添加其他配置文件的话)。这些文件用于配置Spring Boot应用的各种属性,如服务器端口、数据库连接等。例如,在application.properties中可以设置服务器端口为8081:
    server.port = 8081
    
  3. 说明包结构和类的组织方式
    • 在项目中,通常按照功能模块来组织包结构。例如,可以有com.example.demo.controller包用于存放控制器类,com.example.demo.service包用于存放服务类,com.example.demo.repository包用于存放数据访问层的类。这样的组织方式使得项目结构清晰,便于维护和扩展。

四、编写第一个简单的API

(一)创建一个简单的RESTful API

  1. 使用@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响应体返回,而不是作为视图名进行解析。
  2. 编写一个简单的方法返回固定字符串
    • 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!”这个字符串。
  3. 讲解@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

  1. 在IDE中运行Spring Boot项目
    • 在IntelliJ IDEA中,可以直接点击主程序类中的main方法旁边的绿色运行按钮来运行项目。项目启动后,可以在控制台看到启动日志,其中包含了应用启动的相关信息,如服务器启动在哪个端口等。
  2. 使用Postman或浏览器测试API
    • 如果使用浏览器测试,可以在浏览器的地址栏中输入http://localhost:8080/hello(如果没有修改服务器端口的话),就可以看到浏览器显示“Hello, Spring Boot!”。
    • 如果使用Postman测试,可以打开Postman,创建一个新的GET请求,输入http://localhost:8080/hello作为请求地址,然后点击“Send”按钮,在响应体中就可以看到“Hello, Spring Boot!”这个结果。

五、深入理解自动配置

(一)什么是Spring Boot自动配置

  1. 解释自动配置的概念和原理
    • Spring Boot的自动配置是其核心特性之一。它基于条件注解(如@Conditional系列注解)来根据项目的依赖和环境自动配置Spring容器中的Bean。例如,当项目中添加了spring - web依赖时,Spring Boot会自动配置一个嵌入式的Web服务器(如Tomcat),并且配置相关的Servlet、Filter等组件。
    • 原理上,Spring Boot在启动时会扫描类路径下的各种配置类和Bean定义。对于自动配置类,它们会根据条件判断是否需要进行配置。这些条件可以基于类是否存在、环境变量是否设置、配置文件中的属性是否满足等。例如,有一个自动配置类可能会检查类路径下是否存在某个数据库驱动类,如果存在,则会自动配置数据库连接相关的Bean。
  2. 举例说明自动配置如何简化开发
    • 假设我们要创建一个简单的Web应用,在传统的Spring开发中,我们需要手动配置一个Web服务器,如Tomcat。这包括创建Tomcat实例,配置端口号,设置Servlet上下文等一系列复杂的操作。而在Spring Boot中,只需要添加spring - web依赖,Spring Boot就会自动配置好一个嵌入式的Tomcat服务器,并且默认将服务器端口设置为8080。我们可以直接编写业务逻辑代码,无需关心Web服务器的底层配置。

(二)查看自动配置的生效情况

  1. 使用@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类时,这个自动配置类才会生效。
  2. 在日志中查看自动配置的加载信息
    • 在项目启动时,可以在控制台的启动日志中查看自动配置的加载情况。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的世界。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows搭建RTMP服务器

这里写自定义目录标题 1 Nginx-RTMP服务器搭建1.1 下载Nginx1.2 下载Nginx的RTMP扩展包1.3 配置Nginx1.4 启动Nginx1.5 查看Nginx状态 2 FFmpeg推流2.1 下载FFmpeg2.2 配置FFmpeg环境变量2.3 验证FFmpeg配置 3 视频推流3.1 OBS推流3.2 FFmpeg推流 4 VLC拉流4.1 VLC4.2 打开网络…

4款专业电脑数据恢复软件,帮你保障数据安全。

电脑里面会出现的数据丢失场景有很多,像硬盘故障、回收站清空、电脑格式化、系统崩溃、病毒入侵等等;如果发现数据丢失后,建议应停止使用电脑,避免新的数据写入覆盖丢失的数据。然后再尝试进行数据找回,如果想自己进行…

合肥企业参访:走进联想合肥智能制造基地参观学习

跟随华研标杆游学高丽华高老师去到联想参观游学 联想合肥智能制造基地成立于2011年,是联想集团全球蕞大的PC研发和制造基地,也是智能制造示范基地。基地占地约500亩,拥有全球PC制造业蕞大的单体厂房以及业界主板、整机生产线。在这里&#xf…

RTSP作为客户端 推流 拉流的过程分析

之前写过一个 rtsp server 作为服务端的简单demo 这次分析下 rtsp作为客户端 推流和拉流时候的过 A.作为客户端拉流 TCP方式 1.Client发送OPTIONS方法 Server回应告诉支持的方法 2.Client发送DESCRIPE方法 这里是从海康摄像机拉流并且设置了用户名密码 Server回复未认证 3.客…

数据结构-3.5.队列的顺序实现

一.队列的顺序实现&#xff0c;初始化操作以及判断队列是否为空&#xff1a; 1.图解&#xff1a; 2.代码&#xff1a; #include<stdio.h> #define MaxSize 10 //定义一个队列最多存储的元素个数 ​ typedef struct {int data[MaxSize]; //用静态数组存放队列元素int f…

使用Buildpacks构建Docker镜像

## 使用Buildpacks构建Docker镜像 ![](../assets/运维手册-Buildpacks-Buildpacks.io.png) ### Buildpacks简介 与Dockerfile相比&#xff0c;Buildpacks为构建应用程序提供了更高层次的抽象。具体来说&#xff0c;Buildpacks&#xff1a; * 提供一个平衡的控制&#xff0c;…

emp.dll丢失损坏怎么办,总结6个解决emp.dll丢失的方法

我们在用电脑的时候&#xff0c;经常会碰到各种各样的问题&#xff0c;其中一个就是emp.dll丢失或缺失。这个东东可是Windows操作系统中非常重要的一个动态链接库文件哦&#xff0c;它是负责管理一些重要系统功能的。假如这个文件丢了&#xff0c;很可能会导致程序无法正常运行…

小程序图片资源等使用阿里服务链接更新问题

同名更换图片&#xff0c;小程序无需发版本更新&#xff0c;存在图片缓存问题解决方法 修改Cache-Control参数即可

深度解析:Python蓝桥杯青少组精英赛道与高端题型概览

目录 一、蓝桥杯青少组简介二、赛项组别与年龄范围三、比赛内容与题型1. 基础知识范围2. 题型设置2.1 选择题2.2 编程题 3. 考试时长 四、奖项设置与激励措施五、总结 一、蓝桥杯青少组简介 蓝桥杯全国软件和信息技术专业人才大赛&#xff08;简称“蓝桥杯”&#xff09;是由工…

【Qt+Python项目构建】- 01-首次配置 Qt Creator 14.01 for Python

前言&#xff1a; 如何用QT实现Python的配置的交互界面。本文从0开始&#xff0c;进行实践的介绍。 在上一节里面&#xff0c;我们做了社区版本的配置&#xff1a; https://blog.csdn.net/yellow_hill/article/details/142597007?spm1001.2014.3001.5501 这一节&#xff0…

【C++11】新特性

前言&#xff1a; C11 是C编程语言的一个重要版本&#xff0c;于2011年发布。它带来了数量可观的变化&#xff0c;包含约 140 个新特性&#xff0c;以及对 C03 标准中约600个缺陷的修正&#xff0c;更像是从 C98/03 中孕育出的新语言 列表初始化 C11 中的列表初始化&#xff0…

探索Kimi:用Spring Boot + Vue打造现代网站

在数字化时代&#xff0c;网站成为了企业和个人展示自己的窗口。今天&#xff0c;我将带你一起探索如何利用Spring Boot和Vue.js这两个强大的技术栈&#xff0c;结合Kimi的智能助手功能&#xff0c;来构建一个现代的网站。这不仅是一个技术分享&#xff0c;更是一次实战演示&am…

ubuntu22.04桌面美化

文章目录 原桌面自动隐藏任务栏图标居中去除桌面上的Home文件夹去除硬盘图标和垃圾箱图标壁纸网站 原桌面 自动隐藏任务栏图标居中 效果&#xff1a; 去除桌面上的Home文件夹 去除硬盘图标和垃圾箱图标 壁纸网站 https://hdqwalls.com/wallpaper/3840x2160/cherry-blossom-p…

【C++】二叉搜索树+变身 = AVL树

&#x1f680;个人主页&#xff1a;小羊 &#x1f680;所属专栏&#xff1a;C 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 前言一、AVL树二、AVL树的实现2.1 平衡因子2.2 旋转处理2.2.1 左单旋&#xff1a;插入新节点后单纯的右边高2.2.2 …

MySQL--聚合查询、联合查询、子查询、合并查询(上万字超详解!!!)

目录 一、前言二、聚合查询2.1 聚合函数2.1.1 COUNT():统计所有行2.1.2 SUM(列名) 求和2.1.3 AVG()2.1.4 MAX()、MIN() 2.2 GROUP BY子句&#xff08;分组查询&#xff09;2.3 HAVING 三、联合查询3.1表的笛卡儿积3.2内连接3.2.1 例题一3.2.2 例题二 3.3外连接3.3.1 右外连接3.…

使用 Python 遍历文件夹

要解决这个问题&#xff0c;使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树&#xff0c;找到所有的 text 文件&#xff0c;读取内容&#xff0c;处理空行和空格&#xff0c;并将处理后的内容合并到一个新的文件中。 整体思路&#xff1a; 遍历子目录&#xff1…

ConcurrentHashMap在JDK1.7和1.8的区别,详解

目录 1.了解HashMap底层插入原理 2.ConcurrentHashMap 是什么&#xff1f; HashTable的实现 3.ConcurrentHashMap 1.7和1.8的区别 4、JDK1.7 中的ConcurrentHashMap实现原理 6、JDK1.8中的ConcurrentHashMap 7.链表转红黑树条件 1.8 put方法 8.并发扩容 9.总结 首先呢…

Vite多环境配置与打包:

环境变量必须以VITE开头 1.VITE_BASE_API&#xff1a; 在开发环境中设置为 /dev-api&#xff0c;这是一个本地 mock 地址&#xff0c;通常用于模拟后端接口。 2.VITE_ENABLE_ERUDA&#xff1a; 设置为 "true"&#xff0c;表示启用调试工具&#xff0c;通常是为了…

Android Framework AMS(01)AMS启动及相关初始化1-4

该系列文章总纲链接&#xff1a;专题总纲目录 Android Framework 总纲 本章关键点总结 & 说明&#xff1a; 说明&#xff1a;本章节主要涉及systemserver启动AMS及初始化AMS相关操作。同时由于该部分内容分析过多&#xff0c;因此拆成2个章节&#xff0c;本章节是第一章节&…

用户在网页上输入一个网址,它整个页面响应的流程是什么?

目录 一、流程的大致过程 二、流程的详细分析 1. 浏览器先分析超链接中的URL 2. DNS解析 3. 建立TCP连接 建立连接&#xff08;三次握手&#xff09; HTTP中的请求报文 4. 浏览器发送HTTP请求 5. 服务器处理请求并发送响应 HTTP的响应报文 6. 浏览器接收响应 7. 渲…