【Spring Boot 应用开发】-01 初识

特性

Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是帮助开发者快速创建独立的、生产级的基于 Spring 框架的应用程序。以下是 Spring Boot 的一些主要特点:

  • 简化配置:Spring Boot 提供了自动配置机制,能够根据类路径中的依赖自动配置 Spring 应用。例如,如果在类路径中存在 H2 数据库驱动,它会自动配置一个内存数据库。

  • 独立运行:使用内嵌的服务器(如 Tomcat 或 Jetty),Spring Boot 应用可以被打包成 JAR 文件并直接运行,而不需要外部部署环境。

  • 起步依赖:通过定义一组对常用功能的依赖描述符(即 Starter 依赖),简化了 Maven 或 Gradle 构建配置。比如 spring-boot-starter-web 包含了构建 Web 应用所需的所有依赖。

  • 健康检查与监控:内置了 Actuator 模块,提供了应用健康状态检查、度量指标收集等功能,有助于运维和监控。

  • 命令行接口:提供了一个 CLI 工具,允许用户直接在命令行编写 Groovy 脚本来快速测试 Spring 功能。

  • 开发工具支持:包括热部署、远程调试等特性,提高了开发效率。

  • 非功能性特性:开箱即用地支持多种非功能性需求,如安全性、批处理、消息传递等。

示例

要开始使用 Spring Boot,您只需要添加适当的依赖到您的项目中,并创建一个带有 @SpringBootApplication 注解的主类即可启动应用程序。下面是一个简单的 Hello World 示例:

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}@RestControllerclass HelloWorldController {@GetMapping("/hello")String hello() {return "Hello, World!";}}
}

这段代码定义了一个 RESTful Web 服务,当访问 /hello 路径时会返回 "Hello, World!" 字符串。

pom配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.0.4</version> <!-- 请根据需要选择合适的Spring Boot版本 --><relativePath/> <!-- lookup parent from repository --></parent><groupId>org.example</groupId><artifactId>bear-springboot</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>
</project>

工程结构
在这里插入图片描述
访问
在这里插入图片描述

这样一个最简单的springboot后端工程就搞定了,非常简单,不需要额外的配置、不需要tomcat或者别的服务器、不需要引入各种依赖jar包。这就是文章开头说的:

其设计目的是帮助开发者快速创建独立的、生产级的基于 Spring 框架的应用程序

也就说,Spring Boot 并不是新创造的东西,它是基于Spring框架,提供一整套更方便的开发框架和方式。那么SpringBoot是怎么做到的?我们看看启动类的代码都干了什么。

代码解释

1. 包声明

package org.example;
  • 这行代码指定了该 Java 类所在的包名为 org.example。包名用于组织和命名空间隔离,确保类名在不同项目中不会冲突。

2. 导入语句

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.web.bind.annotation.*;
  • org.springframework.boot.*: 导入了 Spring Boot 的核心类库,包括启动应用程序所需的类。
  • org.springframework.boot.autoconfigure.*: 导入了自动配置相关的类,Spring Boot 会根据这些配置自动设置应用程序环境。
  • org.springframework.web.bind.annotation.*: 导入了构建 RESTful Web 服务所需的注解,如 @RestController@GetMapping

3. 主类定义

@SpringBootApplication
public class Application {
  • @SpringBootApplication: 这是一个组合注解,包含了以下三个注解的功能:
    • @Configuration: 标识该类为配置类,允许使用 @Bean 注解来定义组件。
    • @EnableAutoConfiguration: 启用 Spring Boot 的自动配置机制,根据类路径中的依赖自动配置应用程序。
    • @ComponentScan: 自动扫描并注册带有 @Component@Service@Repository 等注解的类为 Spring Bean。

4. 主方法

public static void main(String[] args) {SpringApplication.run(Application.class, args);
}
  • main 方法是应用程序的入口点。
  • SpringApplication.run(Application.class, args):创建并启动 Spring Boot 应用程序。它会执行以下操作:
    • 解析命令行参数。
    • 初始化 Spring 应用上下文(ApplicationContext)。
    • 执行自动配置。
    • 启动内嵌的服务器(如 Tomcat),如果应用包含 Web 组件。

5. 内部控制器类

@RestController
class HelloWorldController {@GetMapping("/hello")String hello() {return "Hello, World!";}
}
  • @RestController: 将该类标记为一个 RESTful 控制器,所有方法返回的内容将直接作为 HTTP 响应体返回给客户端。
  • HelloWorldController 是一个内部类,定义了一个简单的 REST API。
    • @GetMapping("/hello"): 指定该方法处理 HTTP GET 请求,路径为 /hello
    • String hello(): 当访问 /hello 路径时,该方法被调用并返回字符串 "Hello, World!"

总结

其实,关键就是SpringApplication.run(Application.class, args),在启动的时候干了各种事情,解析注解、生成上下文、启动tomcat等,后续会有篇幅具体解析下这个启动函数干了什么,从源码的层面加深理解。

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

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

相关文章

数学基础 -- 拉普拉斯算子的原理与应用

拉普拉斯算子的原理与应用 拉普拉斯算子&#xff08;Laplacian Operator&#xff09;是图像处理中用于检测区域二阶变化的重要工具&#xff0c;尤其擅长检测图像中的边缘、斑点等区域特征。它是基于图像的二阶导数&#xff0c;在空间域中描述像素强度变化的加速度。 1. 拉普拉…

【蓝桥杯】43709.机器人繁殖

题目描述 X 星系的机器人可以自动复制自己。它们用 1 年的时间可以复制出 2 个自己&#xff0c;然后就失去复制能力。 每年 X 星系都会选出 1 个新出生的机器人发往太空。也就是说&#xff0c;如果 X 星系原有机器人 5 个&#xff0c;1 年后总数是&#xff1a;5 9 14&#xf…

前端开发 vue 中如何实现 u-form 多个form表单同时校验

在 Vue 项目中使用 UView UI 的 u-form 组件时&#xff0c;多个表单同时校验的需求非常常见。例如&#xff0c;当我们有多个表单需要在同一个页面中进行校验并提交时&#xff0c;我们需要确保每个表单都能进行单独验证&#xff0c;同时可以在同一时刻进行批量验证。 接下来&am…

AR 眼镜之-拍照/录像动效切换-实现方案

目录 &#x1f4c2; 前言 AR 眼镜系统版本 拍照/录像动效切换 1. &#x1f531; 技术方案 1.1 技术方案概述 1.2 实现方案 1&#xff09;第一阶段动效 2&#xff09;第二阶段动效 2. &#x1f4a0; 默认代码配置 2.1 XML 初始布局 2.2 监听滑动对 View 改变 3. ⚛️…

Linux 下 Vim 环境安装踩坑问题汇总及解决方法(重置版)

导航 安装教程导航 Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;初版&#xff09;Linux 下Mamba 及 Vim 安装问题参看本人博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法&#xff08;重置版&#xff09;Windows …

django解决跨域问题

# 1.安装django-cors-headers 库 pip install django-cors-headers -i https://pypi.tuna.tsinghua.edu.cn/simple2.添加到应用程序中 添加 corsheaders 到你的 INSTALLED_APPS 设置中&#xff1a; INSTALLED_APPS [...corsheaders,... ]3.添加中间件 MIDDLEWARE [...cor…

32单片机从入门到精通之用户界面——用户界面(十四)

不论你现在处于什么样的困境和挑战&#xff0c;不要放弃希望和努力。成功之路不会一帆风顺&#xff0c;但是只要你坚定信念&#xff0c;勇敢面对困难&#xff0c;努力奋斗&#xff0c;就一定能够战胜困难&#xff0c;迈向成功的道路。困难和挫折只是暂时的&#xff0c;而坚持和…

Ubuntu Bash工具

Ubuntu Bash工具 &#x1f4bb;⚡ Ubuntu Bash 工具&#x1f528; 指令列表1. &#x1f50b; 查看电池信息 (-b)2. &#x1f4bb; 查看 CPU 和内存使用情况 (-m)3. &#x1f504; 旋转屏幕 (-r)4. &#x1f513; 解锁屏幕 (-s)5. &#x1f310; 设置代理 (-p <proxy_url>…

【GoLang】两个字符串如何比较大小?以及字典顺序的比较规则

在 Go 语言中&#xff0c;字符串的比较是基于字典顺序进行的。 字典顺序的比较规则&#xff1a; 比较两个字符串从左到右逐个字符的Unicode码点值&#xff0c; 若比较结果不相等则将此结果作为字符串大小的结果&#xff0c; 若比较结果相等则比较下一位&#xff0c; 若其中一个…

为什么HTTP请求后面有时带一个sign参数(HTTP请求签名校验)

前言 最近在开发过程中&#xff0c;发现前端有很多的接口发送请求时都会携带signxxxx参数&#xff0c;但是后端明明没有写&#xff0c;也不需要这个参数&#xff0c;后面才知道&#xff0c;这个前面是为了给http请求签名&#xff0c;主要是为了防止请求体和请求参数被拦截篡改…

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式&#xff0c;又称贝叶斯定理、贝叶斯法则&#xff0c;最初是用来描述两个事件的条件概率间的关系的公式&#xff0c;后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是&#xff0c;支持某项属性的事件发生得愈多&#xff0c;则该属性成…

matlab离线安装硬件支持包

MATLAB 硬件支持包离线安装 本文章提供matlab硬件支持包离线安装教程&#xff0c;因为我的matlab安装的某种原因&#xff08;破解&#xff09;&#xff0c;不支持硬件支持包的安装&#xff0c;相信也有很多相同情况的朋友&#xff0c;所以记录一下我是如何离线安装的&#xff…

java中手机号,身份证号,邮箱,密码,银行卡号加密

1. 使用hutool工具依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-core</artifactId><version>5.8.11</version><scope>compile</scope></dependency> 2. 使用方式【使用工具类】 Data Equa…

Infineon PSoC 4 CapSense ModusToolbox IDE - 系统生态篇

本文档说明了 ModusToolbox 软体环境的 4 个层面&#xff0c;该环境为 CapSense 设备和生态系统提供支援。本文是 Infineon PSoC 4 CapSense ModusToolbox IDE-系统介绍的延伸篇 (Infineon PSoC 4 CapSense ModusToolbox IDE -系统介绍篇 - 大大通(简体站))。 什么是ModusToolb…

使用PVE快速创建虚拟机集群并搭建docker环境

安装Linux系统 这里以安装龙蜥操作系统AnolisOS8.9为例加以说明。 通过PVE后台上传操作系统ISO镜像。 然后在PVE上【创建虚拟机】&#xff0c;选定上传的龙蜥操作系统镜像进行系统安装。 注意&#xff1a;在安装过程中&#xff0c;要设定语言、时区、超管用户root的密码、普…

ElasticSearch内存占用率过高怎么办?

文章目录 1&#xff0c;先用top看看各个进程的内存占用情况2&#xff0c;不能简单的杀死进程&#xff0c;然后再重启。3&#xff0c;查看一下ElasticSearch进程的具体启动情况4&#xff0c;修改Elasticsearch 的Java堆内存 1&#xff0c;先用top看看各个进程的内存占用情况 先…

OpenHarmony AVScreenCaptureRecorder录屏开发指导

一、简介 OpenHarmony 5.0新增了AVScreenCaptureRecorder ArkTs API。用户可以调用录屏AVScreenCaptureRecorder API录制屏幕&#xff0c;采集音频源数据&#xff0c;获取封装后的音视频文件&#xff0c;然后通过文件的形式流转到其他模块进行播放或处理&#xff0c;用于以文件…

【Spring】构造方法注入 属性加final

在Spring框架中&#xff0c;构造方法注入是一种常见的依赖注入方式。通过构造方法注入&#xff0c;Spring容器会在创建Bean时自动调用相应的构造方法&#xff0c;并将所需的依赖作为参数传入。关于构造方法注入时属性是否加final关键字&#xff0c;主要有以下几点区别&#xff…

windows C#-泛型接口

为泛型集合类或表示集合中的项的泛型类定义接口通常很有用处。 为避免对值类型执行装箱和取消装箱操作&#xff0c;最好对泛型类使用泛型接口&#xff0c;例如 IComparable<T>。 .NET 类库定义多个泛型接口&#xff0c;以便用于 System.Collections.Generic 命名空间中的…

ios脚本巨魔商店多巴胺越狱基本操作教程

准备工作 确认设备兼容性&#xff1a;A9-A11&#xff08;iPhone6s&#xff0d;X&#xff09;&#xff1a;iOS15.0-16.6.1&#xff1b;A12-A14&#xff08;iPhoneXR&#xff0d;12PM&#xff09;&#xff1a;iOS15.0-16.5.1&#xff1b;A15-A16&#xff08;iPhone13&#xff0d…