当前位置: 首页 > news >正文

Spring Boot篇

为什么要用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 {@OverridepublicvoidaddCorsMappings(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 依赖关系。 它 只需 要很少的配置,并且不需要样板代码。

相关文章:

Spring Boot篇

为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…...

Unity3D学习笔记(二)

一、Unity编辑器相关 1、 Unity特殊的专属文件夹 1) Editor:编辑器相关资源可以放到此文件中,包括图片、脚本等文件。 2)Editor Default Resources:配合Editor使用不会打包到包中 3)Plugins:存放第三方SD…...

个人毕业设计--基于HarmonyOS的旅行助手APP的设计与实现(挖坑)

在行业混了短短几年,却总感觉越混越迷茫,趁着还有心情学习,把当初API9 的毕业设计项目改成API13的项目。先占个坑,把当初毕业设计的文案搬过来 摘要:HarmonyOS(鸿蒙系统)是华为公司推出的面向全…...

游戏引擎 Unity - Unity 打开项目、Unity Editor 添加简体中文语言包模块、Unity 项目设置为简体中文

Unity Unity 首次发布于 2005 年,属于 Unity Technologies Unity 使用的开发技术有:C# Unity 的适用平台:PC、主机、移动设备、VR / AR、Web 等 Unity 的适用领域:开发中等画质中小型项目 Unity 适合初学者或需要快速上手的开…...

python开发:爬虫示例——GET和POST请求处理

一、Get请求 import json import requests#输入示例:urlhttps://www.baidu.com #RequestHeader:F12标头-请求标头-原始-复制到这(忽略第一句) def GetRequest(url,RequestHeader""):try:dic{}RequestHeaderList RequestHeader.s…...

开源数据分析工具 RapidMiner

RapidMiner是一款功能强大且广泛应用的数据分析工具,其核心功能和特点使其成为数据科学家、商业分析师和预测建模人员的首选工具。以下是对RapidMiner的深度介绍: 1. 概述 RapidMiner是一款开源且全面的端到端数据科学平台,支持从数据准备、…...

Vue canvas画图画线例子,数据回显与隔离,点拖拽修改

组件 <template><divstyle"display: flex; height: 342px; width: 760px; border: 1px solid #000"><divstyle"position: relative; height: 100%; width: 608px; min-width: 608px"><canvasid"mycanvas"ref"mycanva…...

Python实现CAN FD 通信(基于PCAN开发CAN FD测试工具)

目录 一.背景 二. 硬件环境 1.CAN通信设备之PCAN 2.物理架构图 三. 资料分析 四. 二次开发 五. 应用 六. 总结 一.背景 在汽车电子领域中CAN是一种被广泛应用的通信协议,CAN 是controller area network 的缩写(以下称为can),是iso国际标准化的串行通信协议。 关于…...

LeetCode--347. 前 K 个高频元素/Golang中的堆(container/heap)

例题链接-前k个高频元素 前言 以前都是用的C写算法题&#xff0c;最近也想熟悉一下golang的数据结构&#xff0c;故来一篇题解堆分析。 正文 这里重点不在分析题目&#xff0c;在于golang中的 container/heap 对于内部实现逻辑有兴趣的可以去看看源码。 这里先给出题解的代…...

关于大数据

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

9-收纳的知识

[ComponentOf(typeof(xxx))]组件描述&#xff0c;表示是哪个实体的组件 [EntitySystemOf(typeof(xxx))] 系统描述 [Event(SceneType.Demo)] 定义事件&#xff0c;在指定场景的指定事件发生后触发 [ChildOf(typeof(ComputersComponent))] 标明是谁的子实体 [ResponseType(na…...

堆的实现——堆的应用(堆排序)

文章目录 1.堆的实现2.堆的应用--堆排序 大家在学堆的时候&#xff0c;需要有二叉树的基础知识&#xff0c;大家可以看我的二叉树文章&#xff1a;二叉树 1.堆的实现 如果有⼀个关键码的集合 K {k0 , k1 , k2 , …&#xff0c;kn−1 } &#xff0c;把它的所有元素按完全⼆叉树…...

机器学习6-全连接神经网络2

机器学习6-全连接神经网络2-梯度算法改进 梯度下降算法存在的问题动量法与自适应梯度动量法一、动量法的核心思想二、动量法的数学表示三、动量法的作用四、动量法的应用五、示例 自适应梯度与RMSProp 权值初始化随机权值初始化Xavier初始化HE初始化(MSRA) ![在这里插入图片描述…...

基于 SpringBoot 的电影购票系统

基于SpringBoot的电影购票系统是一个集成了现代化Web开发技术的在线电影票务平台。以下是对该系统的详细介绍&#xff1a; 一、系统背景与意义 随着电影行业的快速发展和观众对观影体验的不断追求&#xff0c;电影票务管理面临着越来越多的挑战。传统的票务管理方式存在效率低…...

C++SLT(三)——list

目录 一、list的介绍二、list的使用list的定义方式 三、list的插入和删除push_back和pop_backpush_front和pop_frontinserterase 四、list的迭代器使用五、list的元素获取六、list的大小控制七、list的操作函数sort和reversemergeremoveremove_ifuniqueassignswap 一、list的介…...

C++ Primer 算术运算符

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

数据结构-堆和PriorityQueue

1.堆&#xff08;Heap&#xff09; 1.1堆的概念 堆是一种非常重要的数据结构&#xff0c;通常被实现为一种特殊的完全二叉树 如果有一个关键码的集合K{k0,k1,k2,...,kn-1}&#xff0c;把它所有的元素按照完全二叉树的顺序存储在一个一维数组中&#xff0c;如果满足ki<k2i…...

【玩转 Postman 接口测试与开发2_017】第13章:在 Postman 中实现契约测试(Contract Testing)与 API 接口验证(下)

《API Testing and Development with Postman》最新第二版封面 文章目录 第十三章 契约测试与 API 接口验证8 导入官方契约测试集合9 契约测试集合的详细配置9.1 env-apiKey 的创建与设置9.2 env-workspaceId 的设置9.3 Mock 服务器及 env-server 的配置9.4 API 测试实例的配置…...

R语言 | 使用 ComplexHeatmap 绘制热图,分区并给对角线分区加黑边框

目的&#xff1a;画热图&#xff0c;分区&#xff0c;给对角线分区添加黑色边框 建议直接看0和4。 0. 准备数据 # 安装并加载必要的包 #install.packages("ComplexHeatmap") # 如果尚未安装 library(ComplexHeatmap)# 使用 iris 数据集 #data(iris)# 选择数值列&a…...

React图标库: 使用React Icons实现定制化图标效果

React图标库: 使用React Icons实现定制化图标效果 图标库介绍 是一个专门为React应用设计的图标库&#xff0c;它包含了丰富的图标集合&#xff0c;覆盖了常用的图标类型&#xff0c;如FontAwesome、Material Design等。React Icons可以让开发者在React应用中轻松地添加、定制各…...

Python sider-ai-api库 — 访问Claude、llama、ChatGPT、gemini、o1等大模型API

目前国内少有调用ChatGPT、Claude、Gemini等国外大模型API的库。 Python库sider_ai_api 提供了调用这些大模型的一个完整解决方案&#xff0c; 使得开发者能调用 sider.ai 的API&#xff0c;实现大模型的访问。 Sider是谷歌浏览器和Edge的插件&#xff0c;能调用ChatGPT、Clau…...

DeepSeek、哪吒和数据库:厚积薄发的力量

以下有部分来源于AI&#xff0c;毕竟我认为AI还不能替代&#xff0c;他只能是辅助 快速迭代是应用程序不是工程 在这个追求快速迭代、小步快跑的时代&#xff0c;我们似乎总是被 “快” 的节奏裹挟着前进。但当我们静下心来&#xff0c;审视 DeepSeek 的发展、饺子导演创作哪吒…...

DDD - 微服务架构模型_领域驱动设计(DDD)分层架构 vs 整洁架构(洋葱架构) vs 六边形架构(端口-适配器架构)

文章目录 引言1. 概述2. 领域驱动设计&#xff08;DDD&#xff09;分层架构模型2.1 DDD的核心概念2.2 DDD架构分层解析 3. 整洁架构&#xff1a;洋葱架构与依赖倒置3.1 整洁架构的核心思想3.2 整洁架构的层次结构 4. 六边形架构&#xff1a;解耦核心业务与外部系统4.1 六边形架…...

第 1 天:UE5 C++ 开发环境搭建,全流程指南

&#x1f3af; 目标&#xff1a;搭建 Unreal Engine 5&#xff08;UE5&#xff09;C 开发环境&#xff0c;配置 Visual Studio 并成功运行 C 代码&#xff01; 1️⃣ Unreal Engine 5 安装 &#x1f539; 下载与安装 Unreal Engine 5 步骤&#xff1a; 注册并安装 Epic Game…...

【华为OD-E卷 - 109 磁盘容量排序 100分(python、java、c++、js、c)】

【华为OD-E卷 - 磁盘容量排序 100分&#xff08;python、java、c、js、c&#xff09;】 题目 磁盘的容量单位常用的有M&#xff0c;G&#xff0c;T这三个等级&#xff0c; 它们之间的换算关系为1T 1024G&#xff0c;1G 1024M&#xff0c; 现在给定n块磁盘的容量&#xff0c…...

【大数据技术】编写Python代码实现词频统计(python+hadoop+mapreduce+yarn)

编写Python代码实现词频统计(python+hadoop+mapreduce+yarn) 搭建完全分布式高可用大数据集群(VMware+CentOS+FinalShell) 搭建完全分布式高可用大数据集群(Hadoop+MapReduce+Yarn) 本机PyCharm连接CentOS虚拟机 在阅读本文前,请确保已经阅读过以上三篇文章,成功搭建了…...

5-Scene层级关系

Fiber里有个scene是只读属性&#xff0c;能从fiber中获取它属于哪个场景&#xff0c;scene实体中又声明了fiber&#xff0c;fiber与scene是互相引用的关系。 scene层级关系 举例 在unity.core中的EntityHelper中&#xff0c;可以通过entity获取对应的scene root fiber等属性…...

JVM执行流程与架构(对应不同版本JDK)

直接上图&#xff08;对应JDK8以及以后的HotSpot&#xff09; 这里主要区分说明一下 方法区于 字符串常量池 的位置更迭&#xff1a; 方法区 JDK7 以及之前的版本将方法区存放在堆区域中的 永久代空间&#xff0c;堆的大小由虚拟机参数来控制。 JDK8 以及之后的版本将方法…...

本地部署 DeepSeek-R1:简单易上手,AI 随时可用!

&#x1f3af; 先看看本地部署的运行效果 为了测试本地部署的 DeepSeek-R1 是否真的够强&#xff0c;我们随便问了一道经典的“鸡兔同笼”问题&#xff0c;考察它的推理能力。 &#x1f4cc; 问题示例&#xff1a; 笼子里有鸡和兔&#xff0c;总共有 35 只头&#xff0c;94 只…...

请求响应(接上篇)

请求 日期参数 需要在前面加上一个注解DateTimeFormat来接收传入的参数的值 Json参数 JSON参数&#xff1a;JSON数据键名与形参对象属性名相同&#xff0c;定义POJO类型形参即可接收参数&#xff0c;需要使用 RequestBody 标识 通过RequestBody将JSON格式的数据封装到实体类…...