Spring Boot篇

news2025/3/13 21:57:08

为什么要用Spring Boot

Spring Boot 优点非常多,如:

  1. 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独立运行,所有的依赖包都在一个 jar 包 内。
  2. 简化配置 spring-boot-starter-web 启动器自动依赖其他组件,减少了 maven 的配置。
  3. 自动配置Spring Boot 能根据当前类路径下的类、jar 包来自动配置 bean,如添加一个 spring-boot-starter- web 启动器就能拥有 web 的功能,无需其他配置。
  4. 无代码生成和 XML 配置 Spring Boot 配置过程中无代码生成,也无需 XML 配置文件就能完成所有配置工作,这一切都是借 助 于条件注解完成的,这也是 Spring4.x 的核心功能之一。
  5. 应用监控 Spring Boot 提供一系列端点可以监控服务及应用,做健康检测

Spring Boot的核心注解是哪个?它主要由哪几个注解组成 的?

启动类上面的注解是@SpringBootApplication,它也是 Spring Boot 的核心注解,主要组合包含 了 以下 3 个注解:

@SpringBootConfiguration:组合了 @Configuration 注解,实现配置文件的功能。

@EnableAutoConfiguration:打开自动配置的功能,也可以关闭某个自动配置的选项,如关闭 数 据 源 自 动 配 置 功 能 : @SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })。

@ComponentScan :Spring 组件扫描

运行 Spring Boot有哪几种方式?

  1. 打包用命令或者放到容器中运行
  2. 用 Maven/Gradle 插件运行
  3. 直接执行 main 方法运行

如何理解Spring Boot 中的starters ?

Starters 是什么:

Starters 可以理解为启动器,它包含了一系列可以集成到应用里面的依赖包,你可以一站式集成 Spring 及其他技术,而不需要到处找示例代码和依赖包。如你想使用 Spring JPA 访问数据库, 只要 加入 spring-boot-starter-data-jpa 启动器依赖就能使用了。Starters 包含了许多项目中需 要用到的 依赖,它们能快速持续地运行,都是一系列得到支持的管理传递性依赖。

Starters 命名:

Spring Boot 官方的启动器都是以 spring-boot-starter-命名的,代表了一个特定的应用类型。第 三 方的启动器不能以 spring-boot 开头命名,它们都被 Spring Boot 官方保留。一般一个第三 方的应该 这样命名,像 mybatis 的 mybatis-spring-boot-starter。

启动器名称功能描述
Spring-boot-staete包含自动配置、日志、YAML的支持
spring-boot-starter-web使用Spring MVC构建web 工程,包含restful,默认使用Tomcat容器。
......

1. Spring Boot 生产启动器

启动器名称功能描述
spring-boot-starter-actuator提供生产环境特性,能监控管理应用。
Spring Boot 技术类启动器

1. Spring Boot 技术类启动器

启动器名称功能描述
spring-boot-starter-json提供对JSON的读写支持。
spring-boot-starter-logging默认的日志启动器,默认使用Logback
......

 1. 其他第三方启动器

 如何在Spring Boot 启动的时候运行一些特定的代码?

如果你想在 Spring Boot 启动的时候运行一些特定的代码,你可以实现接口

ApplicationRunner或 者 ,这两个接口实现方式一样,它们都只提供了 一个 run 方法。

CommandLineRunner:启 动 获 取 命 令 行 参 数

Spring Boot 的约定优于配置,你的理解是什么?

我从 4 个方面来回答

1. 首先, 约定优于配置是一种软件设计的范式,它的核心思想是减少软件开发人员对于配置项的维 护,从而让开发人员更加聚焦在业务逻辑上。

2. Spring Boot 就是约定优于配置这一理念下的产物,它类似于 Spring 框架下的一个脚手架,通过 Spring Boot,我们可以快速开发基于 Spring 生态下的应用程序。

3. 基于传统的Spring框架开发web应用,我们需要做很多和业务开发无关并且只需要做一次的配置, 比如

  • 管理 jar 包依赖
  • web.xml 维护
  • Dispatch-Servlet.xml 配置项维护
  • 应用部署到 Web 容器
  • 第三方组件集成到 Spring IOC 容器中的配置项维护

而在 Spring Boot 中,我们不需要再去做这些繁琐的配置,Spring Boot 已经自动帮我们完成了,这 就是约定于配置思想的体现。

4. Spring Boot 约定优于配置的体现有很多,比如

  • Spring Boot Starter 启动依赖,它能帮我们管理所有 jar 包版本
  • 如果当前应用依赖了 spring mvc 相关的 jar,那么 Spring Boot 会自动内置 Tomcat 容器来 运行 web 应用,我们不需要再去单独做应用部署。
  • Spring Boot 的自动装配机制的实现中,通过扫描约定路径下的 spring.factories 文件来识别 配置类,实现 Bean 的自动装配。
  • 默认加载的配置文件 application.properties 等等。 总的来说,约定优于配置是一个比较常见的软件设计思想,它的核心本质都是为了更高效以及更便捷地 实现软件系统的开发和维护。 以上就是我对这个问题的理解。

Spring Boot 中自动装配机制的原理

1、Spring Boot 自动装配是什么?

SpringBoot 自动装配主要是基于注解编程 和 约定优于配置的思想来设计的

自动装配就是由 Spring 自动把其他组件中的 Bean 装载到 IoC 容器中,不需要开发人员再去配置文件 中添加大量的配置。我们只需要在 Spring Boot 的启动类上添加 @SpringBootApplication 注解, 开启自动装配。

这种自动装配的思想,在 Spring 3.x 以后就开始支持,我们只要在类上添加 @Enable 注解就可以了, 只是没有像 Spring Boot 这样全面地去设计。

因此,Spring 和 Spring Boot 的最大区别就是在于 Spring Boot 的自动装配。那自动装配的原理又 是什么呢?

2、自动装配原理

自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,不需要开发人员再去 写 Bean 的装配配置。

在 Spring Boot 应用里面,只需要在启动类加上@SpringBootApplication 注解就可以实现自动装配。 @SpringBootApplication 是一个复合注解,真正实现自动装配的注解是 @EnableAutoConfiguration。

(如图)自动装配的实现主要依靠三个核心关键技术。

  1. 引入 Starter 启动依赖组件的时候,这个组件里面必须包含@Configuration 配置类,在这个配置 类里面通过@Bean 注解声明需要装配到 IOC 容器的 Bean 对象。
  2. 这个配置类是放在第三方的 jar 包里面,然后通过 SpringBoot 中的约定优于配置思想,把这个配 置类的全路径放在 classpath:META-INF/spring.factories 文件中。这样 SpringBoot 就可以知道 第三方 jar 包里面的配置类的位置,这个步骤主要是用到了 Spring 里面的 SpringFactoriesLoader 来完成的。
  3. SpringBoot 拿到第三方 jar 包里面声明的配置类以后,再通过 Spring 提供的 ImportSelector 接 口,实现对这些配置类的动态加载。

在我看来,SpringBoot 是约定优于配置这一理念下的产物,所以在很多的地方,都会看到这类的思想。 它的出现,让开发人员更加聚焦在了业务代码的编写上,而不需要去关心和业务无关的配置。

其实,自动装配的思想,在 SpringFramework3.x 版本里面的@Enable 注解,就有了实现的雏形。

@Enable 注解是模块驱动的意思,我们只需要增加某个@Enable 注解,就自动打开某个功能,而不需 要针对这个功能去做 Bean 的配置,@Enable 底层也是帮我们去自动完成这个模块相关 Bean 的注入。 以上,就是我对 Spring Boot 自动装配机制的理解。

SpringBoot 如何解决跨域问题?

问题分析

跨域指的是浏览器在执行网页中的 JavaScript 代码时,由于浏览器同源策略的限制(如图)。

只能访问同源(协议、域名、端口号均相同)的资源,而不能访问其他源(协议、域名、端口号任意一 个不同)的资源。

(如图)比如像这样一种情况就体现了跨域的问题。

而解决跨域问题的方法,就是在不破坏同源策略的情况下,能够安全地实现数据共享和交互。

问题解答

常见的解决跨域问题的方法有两种,一种是 jsonp,另一种是 CORS。

其中,CORS 是一种在服务器后端解决跨域的方案,它的工作原理很简单。

如果一个网站需要访问另一个网站的资源,浏览器会先发送一个 OPTIONS 请求,

根据服务器返回的 Access-Control-Allow-Origin 头信息,决定是否允许跨域访问。

所以,我们只需要在服务器端配置 Access-Control-Allow-Origin 属性,并配置允许哪些域名支持跨 域请求即可。

在 Spring Boot 中,提供了两种配置 Access-Control-Allow-Origin 属性的方式来解决跨域问题

  • 通过@CrossOrigin(origins = "http://localhost:8080")注解,指定允许哪些 origins 允许跨域
  • 使用 WebMvcConfigurer 接口,重写 addCorsMappings 方法来配置允许跨域的请求源
@Configuration
publicclassCorsConfigimplementsWebMvcConfigurer {
    @Override
    publicvoidaddCorsMappings(CorsRegistryregistry) {
        registry.addMapping("/**")
            .allowedOrigins("http://localhost:8080")
            .allowedMethods("*");
    }
}

以上就是我的理解。

SpringBoot 中的监视器是什么?

Spring boot actuator 是 spring 启动框架中的重要功能之一。Spring boot 监视器可帮助您访问 生产 环境中正在运行的应用程序的当前状态。有几个指标必须在生产环境中进行检查和监控。即 使一些 外部应用程序可能正在使用这些服务来向相关人员触发警报消息。监视器模块公开了一组 可直接作 为 HTTP URL 访问的 REST 端点来检查状态。

如何集成SpringBoot 和 ActiveMQ?

对于集成 Spring Boot 和 ActiveMQ,我们使用 spring-boot-starter-activemq 依赖关系。 它 只需 要很少的配置,并且不需要样板代码。

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

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

相关文章

基于SpringBoot的在线远程考试系统的设计与实现(源码+SQL脚本+LW+部署讲解等)

专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…

python实现多路视频,多窗口播放功能

系列Python开发 文章目录 系列Python开发前言一、python实现多路视频播放功能二、代码实现1. http申请视频流地址并cv2播放功能 三、打包代码实现生成可执行文件 总结 前言 一、python实现多路视频播放功能 服务端开发后通常需要做功能测试、性能测试,通常postman、…

Java设计模式:行为型模式→责任链模式

Java 责任链模式详解 1. 定义 责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它使多个对象都有机会处理请求,而不是由一个对象去处理这个请求。这种模式以链表的形式将多个处理对象串联起来,并通…

2025年02月05日Github流行趋势

项目名称:OCRmyPDF 项目地址url:https://github.com/ocrmypdf/OCRmyPDF项目语言:Python历史star数:15872今日star数:157项目维护者:jbarlow83, fritz-hh, apps/dependabot, mawi12345, mara004项目简介&…

关于大数据

在大数据背景下存在的问题: 非结构化、半结构化数据:NoSQL数据库只负责存储;程序处理时涉及到数据移动,速度慢 是否存在一套整体解决方案? 可以存储并处理海量结构化、半结构化、非结构化数据 处理海量数据的速…

离散浣熊优化算法(DCOA)求解大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP),MATLAB代码

大规模旅行商问题(Large-Scale Traveling Salesman Problem,LTSP)是经典旅行商问题(TSP)在规模上的扩展,是一个具有重要理论和实际意义的组合优化问题: 一、问题定义 给定一组城市和它们之间的…

Page Assist实现deepseek离线部署的在线搜索功能

前面文章Mac 基于Ollama 本地部署DeepSeek离线模型 实现了deepseek的离线部署,但是部署完成虽然可以进行问答和交互,也有thinking过程,但是没办法像官方一样进行联网搜索。今天我们介绍一款浏览器插件Page Assist来实现联网搜索,完…

win10系统安装和部署DeepSeek以及python实现

DeepSeek之python实现API应用 1、下载和安装 https://github.com/ollama/ollama/releases/latest/download/OllamaSetup.exe 傻瓜式安装 2、测试安装成功 ollama -v3、拉取模型 选择模型版本:1.5B 版本适合配置一般、想尝鲜、轻度使用的用户;8B 版本适合 16GB 内存以上…

C++六大默认成员函数

C六大默认成员函数 默认构造函数默认析构函数RAII技术RAII的核心思想优点示例应用场景 默认拷贝构造深拷贝和浅拷贝 默认拷贝赋值运算符移动构造函数(C11起)默认移动赋值运算符(C11起)取地址及const取地址操作符重载取地址操作符重…

3D图形学与可视化大屏:什么是片段着色器,有什么作用。

一、片段着色器的概念 在 3D 图形学中,片段着色器(Fragment Shader)是一种在图形渲染管线中负责处理片段(像素)的程序。它的主要任务是确定每个像素的颜色和其他属性,如透明度、深度等。片段着色器是可编程…

人类心智逆向工程:AGI的认知科学基础

文章目录 引言:为何需要逆向工程人类心智?一、逆向工程的定义与目标1.1 什么是逆向工程?1.2 AGI逆向工程的核心目标二、认知科学的四大支柱与AGI2.1 神经科学:大脑的硬件解剖2.2 心理学:心智的行为建模2.3 语言学:符号与意义的桥梁2.4 哲学:意识与自我模型的争议三、逆向…

低代码系统-产品架构案例介绍、蓝凌(十三)

蓝凌低代码系统,依旧是从下到上,从左至右的顺序。 技术平台h/iPaas 指低层使用了哪些技术,例如:微服务架构,MySql数据库。个人认为,如果是市场的主流,就没必要赘述了。 新一代门户 门户设计器&a…

Autosar-以太网是怎么运行的?(Davinci配置部分)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 目录 1.Autosar ETH通讯软件架构 2.Ethernet MCAL配置 2.1配置对应Pin属性 2.2配置TXD引脚 2.3配…

洛谷网站: P3029 [USACO11NOV] Cow Lineup S 题解

题目传送门: P3029 [USACO11NOV] Cow Lineup S - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 前言: 这道题的核心问题是在一条直线上分布着不同品种的牛,要找出一个连续区间,使得这个区间内包含所有不同品种的牛,…

STM32 ADC模数转换器

ADC简介 ADC(Analog-Digital Converter)模拟-数字转换器 ADC可以将引脚上连续变化的模拟电压转换为内存中存储的数字变量,建立模拟电路到数字电路的桥梁 12位逐次逼近型ADC,1us转换时间 输入电压范围:0~3.3V&#xff0…

结合深度学习、自然语言处理(NLP)与多准则决策的三阶段技术框架,旨在实现从消费者情感分析到个性化决策

针对电商个性化推荐场景的集成机器学习和稳健优化三阶段方案。 第一阶段:在线评论数据处理,利用深度学习和自然语言处理技术进行特征挖掘,进而进行消费者情感分析,得到消费者偏好 在第一阶段,我们主要关注如何通过深度学习和自然语…

机器学习8-卷积和卷积核

机器学习7-卷积和卷积核 卷积与图像去噪卷积的定义与性质定义性质卷积的原理卷积步骤卷积的示例与应用卷积的优缺点优点缺点 总结 高斯卷积核卷积核尺寸的设置依据任务类型考虑数据特性实验与调优 高斯函数标准差的设置依据平滑需求结合卷积核尺寸实际应用场景 总结 图像噪声与…

SpringBoot使用 easy-captcha 实现验证码登录功能

文章目录 一、 环境准备1. 解决思路2. 接口文档3. redis下载 二、后端实现1. 引入依赖2. 添加配置3. 后端代码实现4. 前端代码实现 在前后端分离的项目中,登录功能是必不可少的。为了提高安全性,通常会加入验证码验证。 easy-captcha 是一个简单易用的验…

DIY Shell:探秘进程构建与命令解析的核心原理

个人主页:chian-ocean 文章专栏-Linux 前言: Shell(外壳)是一个操作系统的用户界面,它提供了一种方式,使得用户能够与操作系统进行交互。Shell 是用户与操作系统之间的桥梁,允许用户通过命令行…

数据库备份、主从、集群等配置

数据库备份、主从、集群等配置 1 MySQL1.1 docker安装MySQL1.2 主从复制1.2.1 主节点配置1.2.2 从节点配置1.2.3 创建用于主从同步的用户1.2.4 开启主从同步1.2.4 主从同步验证 1.3 主从切换1.3.1 主节点设置只读(在192.168.1.151上操作)1.3.2 检查主从数…