面试笔记系列四之SpringBoot+SpringCloud基础知识点整理及常见面试题

什么是 Spring Boot?


Spring Boot 是 Spring 开源组织下的子项目,是 Spring 组件一站式解决方案,主要是简化了使用 Spring 的难度,简省了繁重的配置,提供了各种启动器,开发者能快速上手。

Spring Boot 有哪些优点?


Spring Boot 主要有如下优点:

容易上手,提升开发效率,为 Spring 开发提供一个更快、更广泛的入门体验。
开箱即用,约定优于配置,远离繁琐的配置。
提供了一系列大型项目通用的非业务性功能,例如:内嵌服务器、安全管理、运行数据监控、运行状况检查和外部化配置等。
没有代码生成,也不需要XML配置。
避免大量的 Maven 导入和各种版本冲突。

SpringBootApplication注解

SpringBootApplication继承了上面三个注解。SpringBootConfiguration,EnableAutoConfiguration,ComponentScan

1.SpringBootConfiguration

他继承了spring的configuration注解,那就是有一样的功能了,就是声明注解的此类为配置类,spring容器会在这里寻找bean配置初始化的参数

2.EnableAutoConfiguration 自动配置配置,猜测你要用做什么开发,如你在pom里面导入spring-boot-starter-web包,他对自动给你导入相应的web工程必备包,减去了自己导入包的麻烦

3.ComponentScan 可以配置注解扫描的包

Spring Boot 的启动流程

可以简单概括为以下几个步骤:

1. **创建 SpringApplication 实例:** Spring Boot 应用程序的启动入口是 `SpringApplication` 类,通常通过静态的 `run` 方法来启动应用程序。这个方法会创建一个 `SpringApplication` 实例,并传入主配置类(Main Application Class)以及启动参数。

2. **初始化 Spring 应用上下文(ApplicationContext):** `SpringApplication` 类会加载主配置类(Main Application Class),并通过 Spring 的 `ApplicationContext` 接口创建应用程序上下文。初始化过程中会自动扫描并加载各个 Bean,进行 Bean 的实例化和依赖注入。

3. **执行 Spring Boot 自动配置(Auto-Configuration):** Spring Boot 提供了自动配置功能,可以根据类路径下的依赖自动配置应用程序所需的 Bean。在初始化应用上下文时,Spring Boot 会根据约定或条件自动配置一些 Bean,简化了配置过程。

4. **执行用户自定义配置:** Spring Boot 会加载应用程序中的自定义配置,例如自定义的 Bean、配置文件等。用户可以通过在主配置类或其他配置类中添加 `@Configuration` 注解来定义自己的 Bean。

5. **执行 SpringApplication 中的运行方法:** 在应用程序上下文初始化完成后,`SpringApplication` 实例会执行其 `run` 方法,启动整个应用程序。这个方法会启动内嵌的 Web 服务器(如 Tomcat、Jetty 等),同时开始监听请求。

6. **启动 Web 服务器:** 如果应用程序是 Web 应用程序,Spring Boot 会启动内嵌的 Web 服务器,并将请求交由 Spring MVC 处理。这样,应用程序就可以处理用户的请求并返回相应内容。

总的来说,Spring Boot 的启动流程包括创建 SpringApplication 实例、初始化应用上下文、执行自动配置和用户自定义配置、执行运行方法以及启动 Web 服务器等步骤。通过自动配置和约定大于配置的原则,Spring Boot 简化了应用程序的开发和部署过程,能快速构建起一个生产级别的应用程序。

Spring Boot属性加载顺序

在Spring Boot中,属性的加载顺序可以根据不同的来源和优先级进行调整。以下是一般情况下属性加载的顺序:

  1. 命令行参数(Command Line Arguments):通过在命令行中使用--key=value的参数形式传递属性值,可以覆盖其他来源中的属性值。

  2. 系统属性(System Properties):可以通过在JVM启动参数中使用-Dkey=value的形式设置系统属性,同样可以覆盖其他来源中的属性值。

  3. 环境变量(Environment Variables):系统环境变量中定义的属性,可以通过System.getenv()方法获取。Spring Boot会自动将环境变量转换成属性。

  4. 配置文件(Application Properties/YAML):Spring Boot支持使用不同的配置文件格式,如.properties和.yaml/.yml文件。配置文件的属性值可以根据不同的配置文件进行覆盖。默认加载的配置文件是application.properties(或application.yml),还可以通过spring.config.namespring.config.location来指定其他名称和位置的配置文件。

  5. 配置文件的Profile相关的属性:可以根据不同的Profile(如开发环境、测试环境、生产环境)来加载对应的属性文件,例如application-dev.properties

  6. 在@Configuration注解修改的类中,通过@PropertySource注解定义的属性

  7. 默认属性(Default Properties):Spring Boot提供了一些内置的默认属性,可以在项目中直接使用。

以上是一般情况下属性加载的顺序,但需要注意的是,并非所有的属性来源和优先级都适用于所有的情况,具体的属性加载顺序还可以根据项目的配置和需求进行自定义(顺序可以修改)。

springboot自动配置原理是什么?(*)

Spring Boot 实现自动配置的核心机制是通过条件化配置和自动扫描来实现。

在 Spring Boot 中,自动配置是通过 @EnableAutoConfiguration 注解来启用的。当应用启动时,@EnableAutoConfiguration 注解会触发自动配置的过程。

Spring Boot 会扫描 classpath 下的特定位置,寻找类路径下的 META-INF/spring.factories 文件,该文件列出了所有可用的自动配置类。Spring Boot 根据这些自动配置类的定义,选择并加载合适的自动配置类。

自动配置类通过 @Conditional 注解来进行条件化配置,根据特定的条件判断是否需要自动配置对应的功能。条件可以是类路径下是否存在特定的类、是否存在特定的 Bean、配置属性是否满足等等。这些条件可以基于 Spring 的 @Conditional 注解进行扩展,也可以自定义条件。

当满足自动配置条件时,自动配置类会配置相应的 Bean,并根据默认策略或自定义策略来进行配置。

可以通过自定义的方式扩展自动配置。通过创建和配置一个类,将其纳入到 Spring Boot 的自动配置机制中,从而在应用启动时自动应用该配置。

总结来说,Spring Boot 的自动配置是通过扫描 META-INF/spring.factories 文件,根据条件对自动配置类进行筛选和加载,并根据配置类的定义来实现自动配置。这种机制可以方便地减少开发者的配置工作,提供默认的配置,同时又允许根据需求进行自定义配置。

如何理解springboot中的starter?

使用spring+springmvc框架进行开发的时候,如果需要引入mybatis框架,那么需要在xml中定义需要的bean对象,这个过程很明显是很麻烦的,如果需要引入额外的其他组件,那么也需要进行复杂的配置,因此在springboot中引入了starter

starter就是一个jar包,写一个@Configuration的配置类,将这些bean定义在其中,然后再starter包的META-INF/spring.factories中写入配置类,那么springboot程序在启动的时候就会按照约定来加载该配置类

开发人员只需要将相应的starter包依赖进应用中,进行相关的属性配置,就可以进行代码开发,而不需要单独进行bean对象的配置

Starter提供了一种快速启动、轻量级的方式来引入和配置特定的功能或模块。

下面是对Spring Boot Starter的几个关键点进行进一步解释:

  1. 关注领域和功能:

    • 每个Starter都关注于特定领域或功能,例如Web开发、数据库访问、消息队列等。

    • Starter的命名通常基于该领域或功能的名称,例如"spring-boot-starter-web"、"spring-boot-starter-data-jpa"等。

  2. 自动配置:

    • Starter提供了自动配置的能力,无需手动编写各种繁琐的配置项。

    • Starter中包含了预定义的默认配置,可以根据类路径上存在的其他组件进行自动配置。

  3. 依赖管理:

    • Starter还提供了对相关依赖的管理,以确保所需要的依赖项都能正确地引入到项目中。

    • Starter中包含了推荐的依赖列表,当引入一个Starter时,相关的依赖项也会被自动引入。

  4. 可插拔性:

    • Spring Boot提供了一种可插拔的机制,允许开发者通过引入或排除不同的Starter来定制应用程序的功能。

    • 通过添加或删除Starter,可以非常方便地增加或减少应用程序所支持的功能。

  5. 快速启动和集成:

    • 引入一个特定的Starter可以让应用程序快速启动并集成所需功能。

    • Starter提供了一种简单而一致的方式来使用和配置功能,大大简化了开发流程。

总的来说,Spring Boot Starter是一种依赖管理和自动配置的机制,为开发人员提供了一种轻便、快速集成特定功能的方法,使得开发Spring Boot应用程序变得更加方便和高效。通过使用Starter,我们可以快速搭建一个具备所需功能的项目,而无需手动处理复杂的依赖和配置。

什么是嵌入式服务器,为什么使用嵌入式服务器?

在springboot框架中,大家应该发现了有一个内嵌的tomcat,在之前的开发流程中,每次写好代码之后必须要将项目部署到一个额外的web服务器中,只有这样才可以运行,这个明显要麻烦很多,而使用springboot的时候,你会发现在启动项目的时候可以直接按照java应用程序的方式来启动项目,不需要额外的环境支持,也不需要tomcat服务器,这是因为在springboot框架中内置了tomcat.jar,来通过main方法启动容器,达到一键开发部署的方式,不需要额外的任何其他操作。

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

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

相关文章

nodejs 实现pdf与图片互转

PDF转图片 效果图 代码 const path require(path); const pdf require(pdf-poppler); const fs require(fs); // PDF文件路径 const pdfFilePath ./path/test.pdf; // 转换选项 const opts { format: png, // 输出图片格式,可以是 jpeg, png, ppm…

Springboot+vue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。

演示视频: Springbootvue的考务报名平台(有报告)。Javaee项目,springboot vue前后端分离项目。 项目介绍: 本文设计了一个基于Springbootvue的前后端分离的考务报名平台,采用M(model&#xff0…

Redis7

摘录 https://github.com/Romantic-Lei/Learning-in-practice/blob/master/Redis/ 官网地址: 英文:Redis 中文:CRUG网站 redis中文文档 安装包:https://redis.io/download/,选择redis7.0版本即可 Redis在线测试地址(不用下载也…

jmeter(四)HTTP请求

启动jmeter,建立一个测试计划 这里再次说说怎么安装和启动jmeter吧,昨天下午又被人问到怎样安装和使用,我也是醉了;在我看来,百度能解决百分之八十的问题,特别是基础的问题。。。 安装:去官网…

黑马程序员——接口测试——day03——Postman断言、关联、参数化

目录: Potman断言 Postman断言简介Postman常用断言 断言响应状态码断言包含某字符串断言JSON数据Postman断言工作原理Postman关联 简介实现步骤核心代码创建环境案例1案例2Postman参数化 简介数据文件简介编写数据文件 CSV文件JSON文件导入数据文件到postman读取数…

springboot-基础-添加model和controller的简单例子+常用注解含义

备份笔记。所有代码都是2019年测试通过的,如有问题请自行搜索解决! 上一篇:springboot-基础-eclipse配置helloword示例 目录 添加model和controller的例子注解开发使用RestController 大坑 Model ModelMap和ModelAndView的区别 添加model和c…

Python算法100例-2.6 分糖果

完整源代码项目地址,关注博主私信源代码后可获取 1.问题描述2.问题分析3.算法设计4.确定程序框架5.完整的程序6.运行结果 1.问题描述 10个小孩围成一圈分糖果,老师分给第1个小孩10块,第2个小孩2块,第3个小孩8块&…

vue 中实现音视频播放进度条(满足常见开发需求)

由于开发需要,作者封装了一个音视频播放进度条的插件,支持 vue2 及 vue3 ,有需要的朋友后台私信作者获取插件哦,下面是对该款插件的介绍。 插件默认样式👇(插件提供了多个配置选项,可根据自身需…

深度访谈 | 模块化建筑让设计和建造更简单!

从汽车行业转行建筑行业转行建筑行业,将汽车工业理念和建筑营造结合。大咖面对面,优积科技CEO刘其东接受自媒体视频号——Elaine深度专访。解读像造汽车一样造房子。 汽车行业和建筑行业有何渊源?到底是什么样的机缘巧合使一帮造汽车的团队要…

PDF文件转换为图片

现在确实有很多线上的工具可以把pdf文件转为图片,比如smallpdf等等,都很好用。但我们有时会碰到一些敏感数据,或者要批量去转,那么需要自己写脚本来实现,以下脚本可以提供这个功能~ def pdf2img(pdf_dir, result_path…

低代码与大语言模型的探索实践

低代码系列文章: 可视化拖拽组件库一些技术要点原理分析可视化拖拽组件库一些技术要点原理分析(二)可视化拖拽组件库一些技术要点原理分析(三)可视化拖拽组件库一些技术要点原理分析(四)低代码…

MQTT协议解析:揭秘固定报头、可变报头与有效载荷的奥秘

MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议)是一种轻量级的通讯协议,常用于远程传感器和控制设备的通讯。MQTT协议基于发布/订阅模式,为大量计算能力有限且工作在低带宽、不可靠网络环境中的设备…

Java设计模式 | 简介

设计模式的重要性: 软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。 这个术语由埃里希 伽玛(Erich Gamma)等人在1…

【JavaEE】_前端POST请求使用json向后端传参

目录 1. 关于json 2. 通过Maven仓库,将Jackson下载导入到项目中 3. 使用Jackson 3.1 关于readValue方法 3.2 关于Request.class类对象 3.3 关于request对象的属性类型 3.4 关于writeValueAsString 前端向后端传递参数通常有三种方法: 第一种&…

Android和Linux的开发差异

最近开始投入Android的怀抱。说来惭愧,08年就听说这东西,当时也有同事投入去看,因为恶心Java,始终对这玩意无感,没想到现在不会这个嵌入式都快要没法搞了。为了不中年失业,所以只能回过头又来学。 首先还是…

Redis之一: 简介及环境安装搭建

什么是NoSQL? NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据&#xf…

C++:类与对象(2)

创作不易,感谢三连! 一、六大默认成员函数 C为了弥补C语言的不足,设置了6个默认成员函数 二、构造函数 2.1 概念 在我们学习数据结构的时候,我们总是要在使用一个对象前进行初始化,这似乎已经成为了一件无法改变的…

算法打卡day5|哈希表篇01|Leetcode 242.有效的字母异位词 、19.删除链表的倒数第N个节点、202. 快乐数、1. 两数之和

哈希表基础知识 哈希表 哈希表关键码就是数组的索引下标,然后通过下标直接访问数组中的元素;数组就是哈希表的一种 一般哈希表都是用来快速判断一个元素是否出现集合里。例如要查询一个名字是否在班级里: 要枚举的话时间复杂度是O(n)&…

【postgresql】数据表id自增与python sqlachemy结合实例

需求: postgresql实现一个建表语句,表名:student,字段id,name,age, 要求:每次添加一个数据id会自动增加1 在PostgreSQL中,您可以使用SERIAL或BIGSERIAL数据类型来自动生成主键ID。以下是一个创建名为stude…

K8S部署Java项目(Gitlab CI/CD自动化部署终极版)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…