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 依赖关系。 它 只需 要很少的配置,并且不需要样板代码。

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

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

相关文章

Python----Python高级(网络编程:网络基础:发展历程,IP地址,MAC地址,域名,端口,子网掩码,网关,URL,DHCP,交换机)

一、网络 早期的计算机程序都是在本机上运行的,数据存储和处理都在同一台机器上完成。随着技术的发展,人 们开始有了让计算机之间相互通信的需求。例如安装在个人计算机上的计算器或记事本应用,其运行环 境仅限于个人计算机内部。这种设置虽然…

JAVA安全—FastJson反序列化利用链跟踪autoType绕过

前言 FastJson这个漏洞我们之前讲过了,今天主要是对它的链条进行分析一下,明白链条的构造原理。 Java安全—log4j日志&FastJson序列化&JNDI注入_log4j漏洞-CSDN博客 漏洞版本 1.2.24及以下没有对序列化的类做校验,导致漏洞产生 1.2.25-1.2.41增加了黑名单限制,…

Kubernetes架构原则和对象设计(三)

云原生学习路线导航页(持续更新中) kubernetes学习系列快捷链接 Kubernetes架构原则和对象设计(一)Kubernetes架构原则和对象设计(二)Kubernetes常见问题解答 本文主要对kubernetes的核心技术概念和核心A…

每日学习 设计模式 五种不同的单例模式

狮子大佬原文 https://blog.csdn.net/weixin_40461281/article/details/135050977 第一种 饿汉式 为什么叫饿汉,指的是"饿" 也就是说对象实例在程序启动时就已经被创建好,不管你是否需要,它都会在类加载时立即实例化,也就是说 实例化是在类加载时候完成的,早早的吃…

Transformer 详解:了解 GPT、BERT 和 T5 背后的模型

目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技​​术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…

21.2.6 字体和边框

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。 通过设置Rang.Font对象的几个成员就可以修改字体,设置Range.Borders就可以修改边框样式。 【例 21.6】【项目&#xff…

1456. 定长子串中元音的最大数目

目录 一、题目二、思路2.1 解题思路2.2 代码尝试2.3 疑难问题 三、解法四、收获4.1 心得4.2 举一反三 一、题目 二、思路 2.1 解题思路 维护一个统计变量,出入时间窗口就判断 2.2 代码尝试 class Solution { public:int maxVowels(string s, int k) {int sum0;i…

[LeetCode]day16 242.有效的字母异位词

242. 有效的字母异位词 - 力扣(LeetCode) 题目描述 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词 示例 1: 输入: s "anagram", t "nagaram" 输出: true示例 2: 输入: s "rat"…

蓝桥杯---力扣题库第38题目解析

文章目录 1.题目重述2.外观数列举例说明3.思路分析(双指针模拟)4.代码说明 1.题目重述 外观数列实际上就是给你一串数字,我们需要对于这个数据进行一个简单的描述罢了; 2.外观数列举例说明 外观数列都是从1开始的,也…

Linux网卡配置方法

1、查看IP ip a 网卡状态 UP/down 2、查看网关 如果显示route命令未找到需要下载net-tools软件包 route -n 3、查看DNS服务器地址 DNS服务器地址会存放在/etc/resolv.conf文件中 使用cat命令可以查看 cat /etc/resolv.conf 4、修改网卡配置 方法1)编…

DeepSeek使用技巧大全(含本地部署教程)

在人工智能技术日新月异的今天,DeepSeek 作为一款极具创新性和实用性的 AI,在众多同类产品中崭露头角,凭借其卓越的性能和丰富的功能,吸引了大量用户的关注。 DeepSeek 是一款由国内顶尖团队研发的人工智能,它基于先进…

消费电子产品中的噪声对TPS54202的影响

本文章是笔者整理的备忘笔记。希望在帮助自己温习避免遗忘的同时,也能帮助其他需要参考的朋友。如有谬误,欢迎大家进行指正。 一、概述 在白色家电领域,降压转换器的应用非常广泛,为了实现不同的功能就需要不同的电源轨。TPS542…

无限使用Cursor

原理:运行程序获得15天的免费试用期,重新运行程序重置试用期,实现无限使用。免费的pro账号,一个月有250的高级模型提问次数。 前提:已安装cursor cursor-vip工具:https://cursor.jeter.eu.org?p95d60efe…

Linux之文件IO前世今生

在 Linux之文件系统前世今生(一) VFS中,我们提到了文件的读写,并给出了简要的读写示意图,本文将分析文件I/O的细节。 一、Buffered I/O(缓存I/O)& Directed I/O(直接I/O&#…

【计组】实验五 J型指令设计实验

目录 一、实验目的 二、实验环境 三、实验原理 四、实验任务 代码 一、实验目的 1. 理解MIPS处理器指令格式及功能。 2. 掌握lw, sw, beq, bne, lui, j, jal指令格式与功能。 3. 掌握ModelSim和ISE\Vivado工具软件。 4. 掌握基本的测试代码编写和FPGA开发板使用方法。 …

扩展知识--缓存和分时复用cpu

在多核CPU中,缓存和分时复用CPU是两个重要的概念,它们分别涉及硬件架构和资源管理策略。以下将从缓存的层次结构、工作原理以及分时复用CPU的概念进行详细解释。 一、多核CPU中的缓存 缓存的定义与作用 缓存(Cache)是位于CPU与主…

人工智能:从概念到未来

人工智能:从概念到未来 一、引言 在当今数字化时代,人工智能(Artificial Intelligence,AI)已从科幻小说和电影中的幻想逐渐走进现实,成为推动社会进步和经济发展的关键力量。它正在深刻地改变着我们的生活…

nvm:node 版本管理器

一、先安装git Git 安装完成后执行 git --version查看版本号是否安装成功 二、安装nvm (参考链接:mac 安装nvm详细教程 - 简书) 官网(https://github.com/nvm-sh/nvm/blob/master/README.md)查看最新版本安装命令 …

【1】深入解析 SD-WAN:从思科 SD-WAN 视角看现代网络发展

1. 什么是 SD-WAN? SD-WAN(软件定义广域网,Software-Defined Wide Area Network)是一种基于 SDN(软件定义网络)的广域网技术。它利用软件控制来管理广域网连接、流量和安全策略,从而优化数据传输,提高网络可用性。 传统的广域网(WAN)通常依赖专线(如 MPLS)连接分…

C语言基础学习之环境准备

写在前面 本文看下如何在win环境中使用vs code开发C程序。 1:安装gcc 从这里下载,解压,配置环境变量,执行gcc -v验证: C:\Windows\system32>gcc -v Using built-in specs. COLLECT_GCCgcc COLLECT_LTO_WRAPPERD:/programs/…