Spring Boot 应用开发:入门与实战

Spring Boot 应用开发:入门与实战

引言

Spring Boot 是 Spring 框架的一个子项目,旨在简化 Spring 应用的配置和开发。它通过自动配置和嵌入式服务器,极大地简化了 Java 企业级应用的开发。本文将详细介绍 Spring Boot 的核心概念,并通过一个简单的 Web 应用来演示如何从零开始构建一个 Spring Boot 项目。
在这里插入图片描述

1. 什么是 Spring Boot?

Spring Boot 是基于 Spring 框架的快速应用开发工具,旨在简化 Spring 应用的配置。其主要目标是提供一个能让开发者专注于业务代码,而无需过多关心底层配置和依赖管理的框架。Spring Boot 具有以下特点:

  • 自动配置:根据项目依赖自动配置 Spring 应用的默认设置。
  • 嵌入式服务器:内置如 Tomcat、Jetty 等应用服务器,无需单独部署。
  • 简化的 Maven/Gradle 构建:通过 spring-boot-starter,减少手动添加依赖的复杂度。
  • 生产就绪特性:内置监控、健康检查和应用度量。
    在这里插入图片描述

2. Spring Boot 项目结构

Spring Boot 项目的典型结构如下:

src
 └── main
     ├── java
     │   └── com.example.demo
     │       ├── DemoApplication.java
     │       └── controller
     │           └── HelloController.java
     └── resources
         ├── application.properties
         └── templates
             └── index.html
  • src/main/java:存放 Java 源代码。
  • src/main/resources:存放配置文件和静态资源,如 application.properties、HTML 模板等。
    在这里插入图片描述

3. 搭建 Spring Boot 应用

我们将构建一个简单的 Spring Boot 应用,通过 Maven 或 Gradle 构建工具生成项目骨架。这里我们以 Maven 为例。

3.1 创建 Maven 项目

可以使用 Spring Initializr 快速创建 Spring Boot 项目,访问 https://start.spring.io/,选择如下设置:

  • Project:Maven
  • Language:Java
  • Spring Boot Version:2.7.0 或最新版本
  • Dependencies:Spring Web

点击生成项目后,将下载一个压缩包,解压并导入到 IDE(如 IntelliJ IDEA)。

3.2 配置 pom.xml

项目的 pom.xml 文件负责管理依赖。在生成的项目中,你会发现 Spring Boot 相关的依赖已经添加好:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.0</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>

<dependencies>
    <!-- Spring Boot Web Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

spring-boot-starter-web 是一个包含了所有 Web 开发所需依赖的包,如 Tomcat、Spring MVC 等。

3.3 编写主类

DemoApplication.java 是项目的主入口,它使用了 @SpringBootApplication 注解,标识这是一个 Spring Boot 应用。

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);
    }
}

@SpringBootApplication 是一个组合注解,包含了以下三个重要注解:

  • @Configuration:允许在类中定义 Spring Bean。
  • @EnableAutoConfiguration:启用 Spring Boot 的自动配置功能。
  • @ComponentScan:启用组件扫描,自动检测并注册 Spring Beans。

3.4 编写控制器

Spring Boot 提供了强大的 MVC 框架支持。接下来我们创建一个简单的 RESTful 控制器,返回一条欢迎信息。

package com.example.demo.controller;

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

@RestController
public class HelloController {

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

在上面的代码中:

  • @RestController 是一个组合注解,包含了 @Controller@ResponseBody,用于处理 RESTful 请求。
  • @GetMapping("/hello") 绑定了 /hello 路径的 GET 请求到 hello() 方法。

3.5 运行应用

通过 IDE 或在命令行执行以下命令,启动 Spring Boot 应用:

mvn spring-boot:run

应用启动后,访问 http://localhost:8080/hello,你将看到:

Hello, Spring Boot!

3.6 自定义配置

Spring Boot 提供了一个强大的配置系统,默认使用 application.propertiesapplication.yml 来管理应用配置。我们可以通过修改 src/main/resources/application.properties 来自定义端口和其他设置。

例如,修改服务器端口为 9090:

server.port=9090

保存后,重新启动应用,访问 http://localhost:9090/hello,效果依旧。
在这里插入图片描述

4. 常见功能扩展

Spring Boot 提供了大量的自动配置模块,常见功能可以通过添加依赖和简单配置来实现。

4.1 数据库集成

Spring Boot 提供了对多种数据库的支持。以 MySQL 为例,首先在 pom.xml 中添加 MySQL 依赖:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

然后,在 application.properties 中配置数据库连接:

spring.datasource.url=jdbc:mysql://localhost:3306/demo
spring.datasource.username=root
spring.datasource.password=yourpassword

接下来,我们可以使用 @Entity 注解定义数据库实体,并使用 JpaRepository 进行 CRUD 操作。

4.2 安全模块集成

Spring Boot 还提供了 Spring Security 的集成。要添加安全模块,只需在 pom.xml 中添加如下依赖:

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

Spring Security 默认会为所有请求添加 HTTP Basic 认证。可以通过配置文件或 Java 代码进行进一步定制。
在这里插入图片描述

5. 结论

Spring Boot 极大地简化了基于 Spring 框架的应用开发,尤其适合快速原型和生产环境的构建。通过自动配置、嵌入式服务器和简化的依赖管理,开发者可以将更多精力集中于业务逻辑的开发。本篇文章展示了如何从头开始构建一个简单的 Spring Boot 应用,并演示了如何扩展项目功能,如数据库集成和安全模块。

示例代码仓库

你可以在 GitHub 示例代码 查看本文所提到的完整代码。

希望通过本篇教程,能够帮助你快速掌握 Spring Boot 应用开发的基础。如果你想深入学习 Spring Boot,可以继续探索其丰富的生态系统和高级功能。
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【SPIE独立出版】第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024,2024年11月15-17日 )

第四届计算机、信息工程与电子材料国际学术会议 (CTIEEM 2024) The 4th International Conference on Computer Technology, Information Engineering and Electron Materials 会议官网&#xff1a;www.ctieem.org The 4th International Conference on Computer Technology,…

【bug】paddleocr draw_ocr_box_txt ValueError: incorrect coordinate type

【bug】paddleocr draw_ocr_box_txt ValueError: incorrect coordinate type 环境 python 3.10.15pillow 10.4.0 paddleocr 2.8.1错误详情 错误文本 Traceback (most recent call last):....draw_left.polygon(box, fillcolor)ValueError: inco…

浏览器内置文字转语音,播报功能Web Speech API - SpeechSynthesisUtterance

SpeechSynthesisUtterance: 让网页说话的艺术 在现代Web开发中&#xff0c;让网页具有语音功能可以极大提升用户体验&#xff0c;特别是对于视障用户或需要多任务处理的场景。SpeechSynthesisUtterance 是 Web Speech API 中的一个接口&#xff0c;它允许开发者创建一个语音合…

穷举vs暴搜vs深搜vs回溯vs剪枝(一)

文章目录 全排列子集找出所有子集的异或总和再求和全排列 II电话号码的字母组合 全排列 题目&#xff1a;全排列 思路 通过深度优先搜索的方式&#xff0c;不断枚举每个数在当前位置的可能性&#xff0c;然后回溯到上一个状态&#xff0c;直到枚举完所有可能性得到正确的结果 r…

SDK5(note上)

以下代码实现菜单窗口和快捷键的ctrlo打开的操作 #include <windows.h> #include<tchar.h> #include <stdio.h> #include <strsafe.h> #include <string> #define IDM_OPEN 102 /*鼠标消息 * 键盘消息 * Onkeydown * Onkeyup * //键盘扫描码 * …

力扣hot100--二叉树

目录 二叉树 1. 94. 二叉树的中序遍历 2. 98. 验证二叉搜索树 3. 101. 对称二叉树 4.102. 二叉树的层序遍历 5. 104. 二叉树的最大深度 6. 105. 从前序与中序遍历序列构造二叉树 7. 114. 二叉树展开为链表 8. 226. 翻转二叉树 9. 236. 二叉树的最近公共祖先 二叉树 …

操作符详解(C 语言)

目录 一、操作符的分类二、算数操作符1. 除法操作符2. 取余操作符 三、位移操作符1. 进制2. 原码、反码和补码3. 左移操作符&#xff08;<<&#xff09;和右移操作符&#xff08;>>&#xff09; 四、位操作符1. 按位与 &2. 按位或 |3. 按位异或 ^4. 按位取反 ~…

大衍数列——考研408考试科目之数据算法——未来之窗学习通

一、大衍数列 中国古代文献中&#xff0c;曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。 它的前几项是&#xff1a;0、2、4、8、12、18、24、32、40、50 … 其规律是&#xff1a;对偶数项&#xff0c;是序号平方再除2&#xff0c;奇数项&#xff0c;是…

有源滤波器(三)

这个连接方法很可以&#xff0c;正好解决了最近没有转接器的问题&#xff1a;

javaweb-xml映射文件编写sql语句

可以使用注解的方式&#xff0c;也可以使用xml映射的方式&#xff0c;一般简单sql语句使用注解&#xff0c;复杂的使用xml映射。

【PhpSpreadsheet】ThinkPHP5+PhpSpreadsheet实现批量导出数据

目录 前言 一、安装 二、API使用 三、完整实例 四、效果图 前言 为什么使用PhpSpreadsheet&#xff1f; 由于PHPExcel不再维护&#xff0c;所以建议使用PhpSpreadsheet来导出exlcel&#xff0c;但是PhpSpreadsheet由于是个新的类库&#xff0c;所以只支持PHP7.1及以上的版…

【文心智能体 | AI大师工坊】如何使用智能体插件,完成一款购物类智能体的开发,来体验一下我的智能体『科技君Tom』

目录 1.1、智能体运行效果1.2、创作灵感来源智能体平台拥有个人化且人性化的大致框架&#xff0c;可以让小白也能搭建出一个智能体其次是拥有丰富的插件&#xff0c;可以更加快速的得到自己想要的效果~ 1.3、如何制作智能体常见问题与解决方案关于人设与回复逻辑插件使用模型的…

【黑马redis高级篇】持久化

//来源[01,05]分布式缓存 除了黑马&#xff0c;还参考了别的。 目录 1.单点redis问题及解决方案2.为什么需要持久化&#xff1f;3.Redis持久化有哪些方式呢&#xff1f;为什么我们需要重点学RDB和AOF&#xff1f;4.RDB4.1 定义4.2 触发方式4.2.1手动触发save4.2.2被动触发bgsa…

文件IO(Linux文件IO,目录操作函数)

前言 本文介绍Linux系统下自带的文件IO的函数。 Linux文件IO相关函数 open函数 #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> int open(const char *pathname, int flags); int open(const char *pathname, int flags, mode_t mode)…

2024ideaUI切换和svn与git的切换

2024的UI实在很不舒服&#xff0c;隐藏了很多按键&#xff1b; 第一步&#xff1a; 视图 -》 外观 -》 工具栏选出来&#xff1b; 结果出来&#xff1a; 运行的按键和设置的按钮 第二步 点击设置的按钮&#xff0c;选择最后一个&#xff0c;重启就行 结果 舒服&#xff01; s…

双通道音频功率放大电路D2822M兼容TDA2822,全封装输出功率0.11W,用于音频产品

在某客户的便携式音频产品中&#xff0c;客户想在确保其产品的性能的前提下&#xff0c;为产品方案寻找一颗国产备份料。客户产品之前使用的是TDA2822&#xff0c;在了解客户的电路设计以及该产品的电气特性后&#xff0c;给客户寻找了一款可兼容相同电路设计使用的国产厂牌芯谷…

2010年国赛高教杯数学建模C题输油管的布置解题全过程文档及程序

2010年国赛高教杯数学建模 C题 输油管的布置 某油田计划在铁路线一侧建造两家炼油厂&#xff0c;同时在铁路线上增建一个车站&#xff0c;用来运送成品油。由于这种模式具有一定的普遍性&#xff0c;油田设计院希望建立管线建设费用最省的一般数学模型与方法。   1. 针对两炼…

Python零基础01——Python的由来,Python的特点、优缺点有哪些?

文章目录 Python的由来Python的特点Python的优缺点什么是编译器 Python的由来 1989年圣诞节期间&#xff0c;在阿姆斯特丹为打发圣诞节的无趣&#xff0c;决定开发一款新的脚本解释语言&#xff0c;作为ABC语言的一种继承&#xff0c;然后他就这么做了&#xff0c;并实现了&am…

Python中的help()函数:追踪错误并提供解决方案

引言 在Python编程中&#xff0c;help()函数是一个非常有用的内置工具&#xff0c;它能够提供关于模块、关键字、属性和方法等的详细信息。对于初学者来说&#xff0c;help()函数可以帮助他们理解代码的工作原理&#xff0c;快速查找文档&#xff0c;以及解决编程过程中遇到的…

<Linux> 线程安全

目录 文章目录 一、Linux线程互斥 1. 进程线程间的互斥相关背景概念 2. 互斥量mutex 3. 互斥量接口 初始化互斥量 动静态分配 销毁互斥量 互斥量加锁 互斥量解锁 4. 互斥量实现原理 5. 简单封装互斥量 二、可重入与线程安全 1. 概念 1.1 可重入 1.2 线程安全 2. 常见的线程不…