什么是Spring Boot?

Spring Boot 是基于 Spring 框架的扩展工具,旨在简化 Spring 应用的初始搭建和开发流程。它通过约定优于配置自动装配机制,减少了传统 Spring 开发中的繁琐配置,使开发者能快速构建独立运行、生产级别的应用。

Spring Boot 的核心特性

  1. 自动配置(Auto-Configuration)
    根据项目依赖(如数据库驱动、Web 模块)自动配置 Spring 应用,无需手动编写 XML 或 Java 配置。

  2. 起步依赖(Starter Dependencies)
    预定义的依赖集合(如 spring-boot-starter-web 包含 Web 开发常用库),简化 Maven/Gradle 配置。

  3. 内嵌服务器(Embedded Server)
    默认集成 Tomcat、Jetty 或 Undertow,可直接打包为可执行的 JAR 文件运行。

  4. Actuator
    提供生产级监控端点(如健康检查、性能指标),便于运维。

如何使用 Spring Boot 开发项目?

1. 创建项目
  • 方式一:使用 Spring Initializr
    选择依赖(如 Spring WebSpring Data JPA),生成项目骨架并下载。

  • 方式二:IDE 集成
    IntelliJ IDEA 或 Eclipse 支持直接创建 Spring Boot 项目。

2. 项目结构

lua

复制

src/main/java/com.example.demo/DemoApplication.java       # 主启动类controller/HelloController.java     # REST 控制器resources/application.properties       # 配置文件
3. 编写主类

java

复制

@SpringBootApplication
public class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}
}
4. 创建 REST 控制器

java

复制

@RestController
public class HelloController {@GetMapping("/hello")public String hello() {return "Hello, Spring Boot!";}
}
5. 配置文件
  • application.properties

    properties

    复制

    server.port=8080
    spring.datasource.url=jdbc:mysql://localhost:3306/mydb
6. 运行应用
  • 命令行:执行 mvn spring-boot:run 或直接运行主类的 main 方法。

  • 打包mvn clean package 生成可执行 JAR,通过 java -jar demo.jar 运行。

注意事项

  1. 自动配置条件
    自动配置基于类路径中的依赖,例如添加 spring-boot-starter-data-jpa 会自动配置数据源。

  2. 自定义配置
    在 application.properties 或 application.yml 中覆盖默认配置。

  3. Profile 区分环境
    使用 spring.profiles.active=dev 指定开发、测试、生产环境配置。

  4. 监控与管理
    启用 spring-boot-starter-actuator 后,访问 /actuator/health 查看应用状态。


总结

Spring Boot 通过减少配置和提供开箱即用的模块,显著提升了开发效率。适合快速构建微服务、REST API 或全栈应用。掌握起步依赖、自动配置和常用注解后,开发者可以专注于业务逻辑而非环境搭建。

Spring Boot 的核心原理是通过约定优于配置自动装配内嵌容器等机制,简化 Spring 应用的开发和部署。以下是其核心原理的详细解析:

1. 启动过程:SpringApplication.run()

当执行 SpringApplication.run() 时,Spring Boot 会启动以下流程:

  • 加载主类:通过 @SpringBootApplication 注解标记的类作为入口。

  • 初始化应用上下文:创建 ApplicationContext(默认是 AnnotationConfigServletWebServerApplicationContext)。

  • 读取配置:加载 application.properties 或 application.yml 中的配置。

  • 自动装配:扫描类路径下的依赖,根据条件自动配置 Bean。

  • 启动内嵌服务器:例如 Tomcat,默认监听 8080 端口。

java

复制

@SpringBootApplication
public class MyApp {public static void main(String[] args) {SpringApplication.run(MyApp.class, args); // 触发启动流程}
}

2. 自动配置(Auto-Configuration)

自动配置是 Spring Boot 的核心机制,通过以下步骤实现:

2.1 @EnableAutoConfiguration 注解
  • 在 @SpringBootApplication 注解中,包含 @EnableAutoConfiguration,触发自动配置逻辑。

  • Spring Boot 会扫描 META-INF/spring.factories 文件,加载所有预定义的自动配置类(例如 DataSourceAutoConfigurationWebMvcAutoConfiguration)。

properties

复制

# 示例:spring-boot-autoconfigure 中的 spring.factories
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
2.2 条件注解(Conditional Annotations)

自动配置类使用条件注解,仅在满足特定条件时才生效:

  • @ConditionalOnClass:类路径存在某个类时生效。

  • @ConditionalOnMissingBean:容器中不存在指定 Bean 时生效。

  • @ConditionalOnProperty:配置文件中存在指定属性时生效。

java

复制

@Configuration
@ConditionalOnClass(DataSource.class) // 当类路径存在 DataSource 类时生效
public class DataSourceAutoConfiguration {@Bean@ConditionalOnMissingBean // 如果用户未自定义 DataSource,则创建默认 Beanpublic DataSource dataSource() {return new EmbeddedDatabaseBuilder().build();}
}
2.3 优先级规则
  • 用户自定义 Bean 优先:如果用户手动定义了某个 Bean(例如 @Bean DataSource),则自动配置的 Bean 不会生效。

  • 配置覆盖:通过 application.properties 可以覆盖自动配置的默认参数。


3. 起步依赖(Starter Dependencies)

起步依赖本质是 Maven/Gradle 的依赖管理模板,通过预定义的依赖集合,解决版本冲突问题。例如:

  • spring-boot-starter-web:包含 Spring MVC、Tomcat、Jackson 等 Web 开发所需依赖。

  • spring-boot-starter-data-jpa:包含 JPA、Hibernate、数据源等数据库相关依赖。

xml

复制

<!-- 示例:pom.xml 中引入 Web Starter -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>

运行 HTML


4. 内嵌服务器(Embedded Server)

Spring Boot 默认内嵌 Tomcat、Jetty 或 Undertow,原理如下:

  • 依赖内嵌服务器库:例如 spring-boot-starter-web 默认包含 Tomcat。

  • 启动时初始化服务器:通过 ServletWebServerFactory 创建服务器实例并绑定端口。

java

复制

// 内嵌 Tomcat 的初始化逻辑(简化版)
public class TomcatServletWebServerFactory implements ServletWebServerFactory {@Overridepublic WebServer getWebServer(ServletContextInitializer... initializers) {Tomcat tomcat = new Tomcat();tomcat.setPort(8080);// 配置 Context 和 Servletreturn new TomcatWebServer(tomcat);}
}

5. 外部化配置

Spring Boot 通过 Environment 对象管理配置,支持多级配置源(优先级从高到低):

  1. 命令行参数(--server.port=8081)。

  2. application.properties 或 application.yml

  3. 默认配置(例如 SpringApplication.setDefaultProperties())。


6. Spring Boot Actuator

Actuator 通过暴露 HTTP 端点(如 /actuator/health)提供应用监控和管理功能:

  • 依赖:引入 spring-boot-starter-actuator

  • 端点配置:通过 management.endpoints.web.exposure.include=* 开启所有端点。


原理总结

机制实现方式
自动配置通过 @Conditional 注解和 spring.factories 按需加载 Bean。
起步依赖Maven/Gradle 的依赖管理模板,解决版本冲突。
内嵌服务器将服务器作为库依赖,启动时动态初始化。
外部化配置多级配置源覆盖机制,支持灵活的环境适配。

关键源码分析

  1. 启动类SpringApplication.run() 方法触发 refreshContext(),初始化应用上下文。

  2. 自动配置SpringFactoriesLoader.loadFactoryNames() 加载 spring.factories 中的配置类。

  3. 条件注解ConditionEvaluator 类负责判断条件是否满足。


注意事项

  • 禁用自动配置:通过 @EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) 排除特定配置。

  • 调试自动配置:启动时添加 --debug 参数,日志会打印生效的自动配置类。

  • 自定义 Starter:可仿照官方 Starter 创建自己的自动配置模块。

Spring Boot 通过以上机制,将传统 Spring 的复杂配置转化为“约定优先”的开发模式,使开发者只需关注业务逻辑,极大提升了开发效率。

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

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

相关文章

后端生成二维码,前端请求接口生成二维码并展示,且多个参数后边的参数没有正常传输问题处理

一、后端代码 1、controller GetMapping("/generateQRCode/{url}")ApiOperation(value "生成url链接二维码",notes "生成url链接二维码")public JsonResult<NewsQRCodeVo> generateQRCode(PathVariable String url,HttpServletRespons…

计算机网络(3)TCP格式/连接

1、TCP三大特点&#xff1a;面向连接、可靠、基于字节流 2、如何唯一确定一个TCP连接&#xff1f;TCP四元组&#xff1a;源地址、源端口、目的地址、目的端口 源地址和目标地址的字段(32 位)是在 IP 头部中&#xff0c;作用是通过 IP 协议发送报文给对方主机源端口和目标端口…

Visual Studio Code使用ai大模型编成

1、在Visual Studio Code搜索安装roo code 2、去https://openrouter.ai/settings/keys官网申请个免费的配置使用

Flowith.io 初探:DeepSeek-R1免费用,用画布式 AI 提升效率和创意

摘要 介绍了 Flowith.io&#xff0c;一款创新的画布式 AI 平台&#xff0c;旨在提升效率和创意。它通过独特的画布交互、Oracle AI 系统、知识花园和丰富的模型选择&#xff0c;为用户提供全新的 AI 体验。画布交互打破线性思维&#xff0c;Oracle AI 帮助任务拆解与执行&#…

JavaEE-SpringBoot快速入门

文章目录 本节目标Maven什么是Maven创建一个Maven项目maven项目功能maven的依赖管理全球仓库, 私服, 本地服务器, 配置国内镜像 第一个SpringBoot项目创建项目运行SpringBoot程序 SpringBoot原理初步Web服务器 总结 本节目标 了解什么是maven, 配置国内源使用Springboot创建项…

Win11配置wsl、ubuntu、docker

系统要求 安装WSL。 开通虚拟化&#xff1a; 准备工作 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-versi…

数据结构 day02

3. 线性表 3.1. 顺序表 3.1.3. 顺序表编程实现 操作&#xff1a;增删改查 .h 文件 #ifndef __SEQLIST_H__ #define __SEQLIST_H__ #define N 10 typedef struct seqlist {int data[N];int last; //代表数组中最后一个有效元素的下标 } seqlist_t;//1.创建一个空的顺序表 seq…

C# 两种方案实现调用 DeepSeek API

目录 序 开发运行环境 访问API的一个通用方法 原生官网实现 申请 API key 调用实现 调用示例 腾讯云知识引擎原子调用 申请 API key 调用示例 小结 序 DeepSeek&#xff08;深度求索&#xff09; 最近可谓火爆的一塌糊涂&#xff0c;具体的介绍这里不再赘述&#x…

23. AI-大语言模型

文章目录 前言一、LLM1. 简介2. 工作原理和结构3. 应用场景4. 最新研究进展5. 比较 二、Transformer架构1. 简介2. 基本原理和结构3. 应用场景4. 最新进展 三、开源1. 开源概念2. 开源模式3. 模型权重 四、再谈DeepSeek 前言 AI‌ 一、LLM LLM&#xff08;Large Language Mod…

web前端第三次作业:登录窗口拖动效果

<!DOCTYPE html> <html lang"zh"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>登录窗口拖动效果</title> <style>…

【PCIe 总线及设备入门学习专栏 1.1 -- PCI 设备访问方法】

文章目录 CPU 地址空间与PCI 地址空间PCI 地址空间CPU 地址空间Host Bridge PCI 设备连接框图PCI 硬件信号Configuration Commands CPU 地址空间与PCI 地址空间 PCI 地址空间 PCI总线具有32位数据/地址复用总线&#xff0c;所以其存储地址空间为2的32次方4GB。也就是PCI上的所…

CentOS 7超详细安装教程(含镜像)

1. 安装前准备 1.1 CentOS简介 CentOS&#xff08;Community Enterprise Operating System&#xff0c;中文意思是&#xff1a;社区企业操作系统&#xff09;是一种基于 Red Hat Enterprise Linux&#xff08;RHEL&#xff09;源代码构建的免费开源操作系统。它在稳定性、安全…

【Linux】详谈 进程控制

目录 一、进程是什么 二、task_struct 三、查看进程 四、创建进程 4.1 fork函数的认识 4.2 2. fork函数的返回值 五、进程终止 5.1. 进程退出的场景 5.2. 进程常见的退出方法 5.2.1 从main返回 5.2.1.1 错误码 5.2.2 exit函数 5.2.3 _exit函数 5.2.4 缓冲区问题补…

音视频入门基础:RTP专题(9)——FFmpeg接收RTP流的原理和内部实现

一、引言 由《音视频入门基础&#xff1a;RTP专题&#xff08;2&#xff09;——使用FFmpeg命令生成RTP流》可以知道&#xff0c;推流端通过下面FFmpeg命令可以将一个媒体文件转推RTP&#xff0c;生成RTP流&#xff1a; ffmpeg -re -stream_loop -1 -i input.mp4 -vcodec cop…

大模型Deepseek的使用_基于阿里云百炼和Chatbox

目录 前言1. 云服务商2. ChatBox参考 前言 上篇博文中探索了&#xff08;本地&#xff09;部署大语言模型&#xff0c;适合微调、数据高隐私性等场景。随着Deepseek-R1的发布&#xff0c;大语言模型的可及性得到极大提升&#xff0c;应用场景不断增加&#xff0c;对高可用的方…

zookeeper watch

目录 回顾回调&观察者模式&发布订阅模式Zookeeper 客户端/ 服务端 watchgetChildren 为例最后归纳 回顾回调&观察者模式&发布订阅模式 回调的思想 类A的a()方法调用类B的b()方法类B的b()方法执行完毕主动调用类A的callback()方法 回调分为同步回调和异步回调…

PAT乙组(1016 部分A+B 1017 A除以B)C语言超详细

文章目录 1016 部分AB1017 A除以B 1016 部分AB 输入样例 1&#xff1a; 3862767 6 13530293 3输出样例 1&#xff1a; 399输入样例 2&#xff1a; 3862767 1 13530293 8输出样例 2&#xff1a; 0代码长度限制 16 KB 时间限制 150 ms 内存限制 64 MB 栈限制 8192 KB 思路解析…

论文笔记:Multi-Head Mixture-of-Experts

2024 neurips 1 背景 稀疏混合专家&#xff08;SMoE&#xff09;可在不显著增加训练和推理成本的前提下提升模型的能力【比如Mixtral 8*7B&#xff0c;表现可以媲美LLaMA-2 70B】 但它也有两个问题 专家激活率低&#xff08;下图左&#xff09; 在优化时只有一小部分专家会被…

【Azure 架构师学习笔记】- Azure Databricks (11) -- UC搭建

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (10) – UC 使用 前言 由于ADB 的更新速度很快&#xff0c;在几个月之后重新搭建ADB 时发现UC 已经更新了很多&#xff0c;为了后续做ADB 的功…

解锁养生秘籍,拥抱健康生活

在这个快节奏的时代&#xff0c;人们行色匆匆&#xff0c;常常在忙碌中忽略了健康。其实&#xff0c;养生并非遥不可及&#xff0c;它就藏在生活的细微之处&#xff0c;等待我们去发现和实践。 规律作息是健康的基础。日出而作&#xff0c;日落而息&#xff0c;顺应自然规律&am…