百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

springcloud实战:springboot的核心原理

liuian 2025-01-26 23:19 27 浏览

Spring Boot核心原理

通过上篇的学习,读者应该对Spring Boot有了一个大致的认识,利用Spring Boot可以极大地简化应用程序的开发,这都归功于Spring Boot的四大核心原理:起步依赖、自动配置、Actuator和Spring Boot命令行。

本篇中,我们将深入探讨Spring Boot 的核心原理,以便读者能更好地学习和使用Spring Boot。

起步依赖机制

我们在使用Spring Boot搭建框架时,使用最频繁的特性就是起步依赖。所谓起步依赖,其本质是Maven项目的对象模型,通过传递依赖,我们很容易集成第三方框架。

起步依赖最明显的特征就是它的名称中包含starter,比如要集成Spring MVC 时,只需要添加spring-boot-starter-web 依赖即可。通过它的名称就可以看出,该依赖主要用于提供 Web支持。如果你曾使用过原生的Spring MVC框架,应该知道,我们需要添加很多依赖包才能正确集成SpringMVC。而在Spring Boot 中,我们无须添加这些依赖,因为Spring MVC的所有依赖包都包含在spring-boot-starter-web 中。

起步依赖还有一个好处,那就是版本管理。往常如果我们要集成一个第三方框架,需要知道它的版本号以及Maven如何依赖它,如果该第三方框架升级,还需要手动修改版本号并考虑是否存在版本冲突等问题。而通过添加 spring-boot-starter依赖,这一切都迎刃而解了。

Spring Boot的起步依赖的原则是,所有正式的启动程序都应遵循spring-boot-starter-*的命名格式。许多IDE中的 Maven集成允许按名称搜索依赖项。例如,安装了适当的Eclipse或STS插件后,你可以在POM Editor按下“Ctrl+空格”组合键,然后键入spring boot starter获得完整的框架列表。SpringBoot 官方集成了目前最流行的大多数应用程序框架,当我们希望集成某种功能时,只需要在官网( https://spring.io)或IDE中搜索对应依赖项并导入到应用即可。

图3-1列举了Spring Boot官方集成的一些第三方框架。

当然,如果我们在使用某种功能时,官方没有对应的starter依赖,也可以自定义starter满足需求。注意,我们在自定义时,命名通常以项目名开始,而不应该以spring-boot开始,因为它是为官方的SpringBoot构建而保留的。例如名为thirdpartyproject 的第三方启动程序项目通常命名为
thirdpartyproject-spring-boot-starter。

Spring Boot起步依赖的核心思想其实就是依赖传递。如果我们需要自定义starter依赖,只需要按照官方对starter 的命名规则创建一个工程,然后将我们期望的依赖包添加进工程并发布到本地仓库或服务器上的 Maven私服即可。这样我们在应用中只需依赖自定义的starter 即可。

自动配置管理

Spring Boot 另一个非常强大的特性就是自动配置管理,通过该特性,我们可以在程序启动时向Spring容器中导入很多配置信息。在传统的Spring MVC架构中,我们一般通过烦琐的XML文件导入配置或注入 Bean;而在 Spring Boot中,这一切都将成为历史。

其实在第2章中,我们已经接触到了它。当创建一个Spring Boot应用时,都会提供一个启动类,该类添加了@SpringBootApplication注解,注解内部包含了@EnableAutoConfiguration注解,它便是Spring Boot的自动配置管理器。通过添加@EnableAutoConfiguration注解,可以自动加载配置信息。

以端口设置为例,我们在application.yml中通过server.port 定义好端口后,Spring Boot应用启动时就会设置为该端口号,那么它是如何实现的呢?其实,application.yml中的所有配置文件最终都会转化为实体类。Spring Boot 会将配置属性的实体类的名称以Properties结尾,放在
org.springframework.boot.autoconfigure包下。server. port对应的实体类就是ServerProperties,其源码如下:

该类首先加入了@ConfigurationProperties注解,其作用就是定义配置属性,其中 prefix是属性前缀,这里为server。因此,server. port对应的就是ServerProperties类的 port字段,在程序启动时,Spring Boot配置管理器会自动将server. port装载到ServerProperties类的port字段中。

通过这种方式,我们完全可以“依葫芦画瓢”,在application.yml中定义自己的配置属性,并通过Spring Boot自动配置管理特性将其实例化到自定义类中。例如,我们在集成第三方平台时,一般都会要求传入appKey和 appSecret,这时就可以将它们定义到application.yml中,如:

然后创建Properties类以便提取配置信息,代码如下:

这里首先将前缀设置为third,注意字段名和 application.yml 中定义的属性名要一致(驼峰命名的允许转为用短横线隔开,如 appKey可以写成app-key )。此外,必须添加@Component注解,否则无法装载到Spring容器中,这样我们就可以通过@Autowired注解注入并使用它,如:

@Autowired
private ThirdProperties thirdProperties;

Actuator监控管理

Actuator是 Spring Boot的一个非常强大的功能,它可以实现应用程序的监控管理,比如帮助我们收集应用程序的运行情况、监测应用程序的健康状况以及显示HTTP跟踪请求信息等。它是我们搭建微服务架构必不可少的环节,是整个系统稳定运行的保障。

在Spring Boot中,集成Actuator也比较简单,只需要在pom.xml中添加以下依赖即可:


org.springframework.boot
spring-boot-starter-actuator

Actuator 内置有很多端点( endpoint ),我们通过这些端点可以获得不同的监控信息。但Actuator默认只开启health和info两个端点。如果要开启更多的端点,可以通过以下配置实现:

management:
endpoints:
web:
exposure:
include: '*'

其中,'*'表示开启所有端点。当然,也可以指定开启的端点,如:

management:
endpoints:
web:
exposure:
include: health,info,httptrace

上述配置表示开启health、info和 httptrace端点。这时启动应用程序,访问地址
localhost:8081/demo/actuator/health,读者通常会在浏览器中看到如图3-2所示的界面。

上述界面提示为406,Not Acceptable,说明不能访问该地址。为了解决这个问题,在Spring Boot应用中,还需要在webConfig类中添加@EnablewebWvc注解,该注解表示启用WebMVC。之后重启应用并访问health端点,就可以看到如图3-3所示的界面,其中 status为UuP说明当前系统正常运行。

表3-1列举了Actuator内置的端点及其功能。

Spring Boot CLI命令行工具

Spring Boot CLI ( Command Line Interface)是一款用于快速搭建基于Spring原型的命令行工具。它支持运行Groovy脚本,这意味着你可以拥有一个与Java语言类似的没有太多样板代码的语法。通过CLI来使用Spring Boot 不是唯一方式,但它是让Spring应用程序“脱离地面”的最快速方法。

安装

要使用CLI,首先应从Spring官方仓库上下载CLI的 release版本,地址是
https:/repo.spring.iol/release/org/springframework/boot/spring-boot-cli/2.0.3.RELEASE/spring-boot-cli-2.0.3.RELEASE-bin.zip。

下载完成并解压后,打开spring-2.0.3.RELEASE文件夹,进入 bin目录,可以看到两个脚本文件,其中 spring用于Linux平台,spring.bat用于Windows平台。Spring Boot CLI依赖Groovy,但是我们不用单独安装它,因为它已经包含到Spring Boot CLI的依赖中了。

可以先将 spring.bat设置到环境变量中,如图3-4所示。

然后打开cmd命令行工具,输入spring --version,可以查看当前Spring Boot CLI的版本号,如:

C:AUsers\lynn>spring --version
Spring CLI v2.0.3.RELEASE

这样Spring Boot CLI就安装完成了。

用法

前面提到过,我们可以通过运行Groovy脚本来快速构建Spring Boot应用。因此,需要先创建一个Groovy脚本文件,并编写以下代码:

@RestController
class HelloController {
@RequestMapping("/")def home() {
"Hello World! "
}
}

上述代码和Java语法很像,它其实就是Groovy脚本代码。看这样一段代码,读者是否似曾相似呢?没错,它和我们编写的控制器类的代码是一样的,编写好这段代码并运行命令:

spring run app.groovy

其中,app.groovy就是你编写的Groovy脚本文件名。第一次启动时,Spring Boot CLI会下载很多依赖包,因此可能需要等待一段时间,启动完成后,访问localhost:8080,浏览器就会打印 Hello World!。

当然,如果读者对Groovy的语法不是很熟悉,我们还可以编写Java代码,如:

@RestController
public class Hellocontroller {
@RequestMapping("/")
public String home() {
return "Hello world ! "
}
}

需要注意的是,文件后缀需要改成.java,然后运行命令 spring run app.java即可。

小结

Spring Boot最核心的部分不外乎起步依赖机制、自动配置管理、Actuator监控管理和Spring BootCLI命令行工具,本章对它们分别进行了剖析。通过对四大核心的研究,读者应该对Spring Boot有了更深的了解,并为后面学习Spring Cloud打下坚实的基础。

本文给大家讲解的内容是springcloud实战:springboot核心原理

  1. 下篇文章给大家讲解的是springcloud实战:探索springcloud的秘密;
  2. 觉得文章不错的朋友可以转发此文关注小编;
  3. 感谢大家的支持

相关推荐

教你把多个视频合并成一个视频的方法

一.情况介绍当你有一个m3u8文件和一个目录,目录中有连续的视频片段,这些片段可以连成一段完整的视频。m3u8文件打开后像这样:m3u8文件,可以理解为播放列表,里面是播放视频片段的顺序。视频片段像这...

零代码编程:用kimichat合并一个文件夹下的多个文件

一个文件夹里面有很多个srt字幕文件,如何借助kimichat来自动批量合并呢?在kimichat对话框中输入提示词:你是一个Python编程专家,完成如下的编程任务:这个文件夹:D:\downloa...

Java APT_java APT 生成代码

JavaAPT(AnnotationProcessingTool)是一种在Java编译阶段处理注解的工具。APT会在编译阶段扫描源代码中的注解,并根据这些注解生成代码、资源文件或其他输出,...

Unit Runtime:一键运行 AI 生成的代码,或许将成为你的复制 + 粘贴神器

在我们构建了UnitMesh架构之后,以及对应的demo之后,便着手于实现UnitMesh架构。于是,我们就继续开始UnitRuntime,以用于直接运行AI生成的代码。PS:...

挣脱臃肿的枷锁:为什么说Vert.x是Java开发者手中的一柄利剑?

如果你是一名Java开发者,那么你的职业生涯几乎无法避开Spring。它如同一位德高望重的老国王,统治着企业级应用开发的大片疆土。SpringBoot的约定大于配置、SpringCloud的微服务...

五年后,谷歌还在全力以赴发展 Kotlin

作者|FredericLardinois译者|Sambodhi策划|Tina自2017年谷歌I/O全球开发者大会上,谷歌首次宣布将Kotlin(JetBrains开发的Ja...

kotlin和java开发哪个好,优缺点对比

Kotlin和Java都是常见的编程语言,它们有各自的优缺点。Kotlin的优点:简洁:Kotlin程序相对于Java程序更简洁,可以减少代码量。安全:Kotlin在类型系统和空值安全...

移动端架构模式全景解析:从MVC到MVVM,如何选择最佳设计方案?

掌握不同架构模式的精髓,是构建可维护、可测试且高效移动应用的关键。在移动应用开发中,选择合适的软件架构模式对项目的可维护性、可测试性和团队协作效率至关重要。随着应用复杂度的增加,一个良好的架构能够帮助...

颜值非常高的XShell替代工具Termora,不一样的使用体验!

Termora是一款面向开发者和运维人员的跨平台SSH终端与文件管理工具,支持Windows、macOS及Linux系统,通过一体化界面简化远程服务器管理流程。其核心定位是解决多平台环境下远程连接、文...

预处理的底层原理和预处理编译运行异常的解决方案

若文章对您有帮助,欢迎关注程序员小迷。助您在编程路上越走越好![Mac-10.7.1LionIntel-based]Q:预处理到底干了什么事情?A:预处理,顾名思义,预先做的处理。源代码中...

为“架构”再建个模:如何用代码描述软件架构?

在架构治理平台ArchGuard中,为了实现对架构的治理,我们需要代码+模型描述所要处理的内容和数据。所以,在ArchGuard中,我们有了代码的模型、依赖的模型、变更的模型等,剩下的两个...

深度解析:Google Gemma 3n —— 移动优先的轻量多模态大模型

2025年6月,Google正式发布了Gemma3n,这是一款能够在2GB内存环境下运行的轻量级多模态大模型。它延续了Gemma家族的开源基因,同时在架构设计上大幅优化,目标是让...

比分网开发技术栈与功能详解_比分网有哪些

一、核心功能模块一个基本的比分网通常包含以下模块:首页/总览实时比分看板:滚动展示所有正在进行的比赛,包含比分、比赛时间、红黄牌等关键信息。热门赛事/焦点战:突出显示重要的、关注度高的比赛。赛事导航...

设计模式之-生成器_一键生成设计

一、【概念定义】——“分步构建复杂对象,隐藏创建细节”生成器模式(BuilderPattern):一种“分步构建型”创建型设计模式,它将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建...

构建第一个 Kotlin Android 应用_kotlin简介

第一步:安装AndroidStudio(推荐IDE)AndroidStudio是官方推荐的Android开发集成开发环境(IDE),内置对Kotlin的完整支持。1.下载And...