SpringBoot原理——面试高频

news2024/9/22 13:45:19

目录

1.什么是起步依赖?

2.起步依赖如何工作?

3.什么是自动配置?

4.自动配置原理


1.什么是起步依赖?

        起步依赖是Spring Boot中的一个概念,它实质上是一个Maven项目对象模型(POM),在这个POM中,定义了开发特定类型Spring Boot应用所需的所有依赖库。例如,spring-boot-starter-web就包含了构建Web应用所需的所有基本组件,如Spring MVC、Tomcat等。开发者只需引入这一个起步依赖,就可以得到一个完整的Web开发环境。

2.起步依赖如何工作?

        继承与依赖管理

  • 每个起步依赖都继承了spring-boot-starter-parent,这是管理依赖版本的关键。spring-boot-starter-parent定义了一系列开发中常用的库和插件的统一版本,确保了项目依赖的一致性。spring-boot-starter-parent是一个特殊的POM。
  • 通过这种方式,Spring Boot确保了项目的各个库版本之间的兼容性,避免了版本冲突的问题。

        自动配置

  • Spring Boot的核心理念之一是“约定优于配置”(Convention over Configuration)。简单来说,如果你遵循了一定的命名规则和目录结构,Spring Boot就能自动配置你的项目。
  • 起步依赖通过引入对应的自动配置类来实现这一功能。这些自动配置类位于spring.factories文件中,它们根据项目中已有的依赖和条件注解如(@ConditionalOnClass、@ConditionalOnMissingBean等)来决定哪些配置生效。
  • @SpringBootApplication注解是Spring Boot自动配置的核心,它封装了三个重要的注解@EnableAutoConfiguration(Springboot实现自动化配置的核心注解,内封装@Import注解)、@ComponentScan(组件扫描,默认扫描当前引导类所在包及其子包)和@SpringBootConfiguration(该注解与@Configuration注解作用相同,用来声明当前也是一个配置类)
    。其中@EnableAutoConfiguration告诉Spring Boot根据添加的依赖自动配置相应的设置。

         简化项目搭建

        开发者只需要引入相关的起步依赖,即可自动获得所需要的全部依赖库和自动配置,无需手动一个个添加依赖,极大简化了项目初始化的复杂度。

3.什么是自动配置?

        自动配置是Spring Boot根据添加的依赖和应用程序的实际配置,自动为你配置Spring应用程序的行为,简单来说,它减少了你需要手动编写的配置量,让你可以更专注于业务逻辑的开发。当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要手动去声明,从而简化了开发,省去繁琐的配置操作。

4.自动配置原理

知识一:@ComponentScan组件扫描(配置了这一项,默认就会失效,所以要把之前的包也带上)

@ComponentScan({"com.example","com.deme"})
@SpringBootApplication
public class SpringbootMybatisQuickstartApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisQuickstartApplication.class, args);
    }
}

知识二:@Import导入。使用@Import导入的类会被Spring加载到IOC容器中,导入形式主要有以下几种:

导入普通类、导入配置类、导入ImportSelector接口实现类

//@Import({TokenParser.class})导入普通类
//@Import({HeaderConfig.class})导入配置类
//@Import({MyImportSelector.class})导入ImportSelect接口实现类
@SpringBootApplication
public class SpringbootMybatisQuickstartApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringbootMybatisQuickstartApplication.class, args);
    }
}

 @EableXxxx注解,封装@Import注解(更加方便)

知识三:条件注解

        Spring Boot使用条件注解(@Conditional)来决定是否应用某个自动配置(按照一定的条件进行判断,在满足给定条件后才会注册对应的bean对象到SpringIOC容器中)。这些条件注解是一个父注解,派生出大量的子注解包括@ConditionalOnClass(表示当类路径下存在某个类时,当前配置生效,注册bean到IOC容器@ConditionalOnMissingBean(表示当容器中不存在某个bean时,当前配置生效,注册bean到IOC容器@ConditionalOnProperty(判断配置文件中有对应的属性和值,才注册到bean到IOC容器)等。可以写在类和方法上。

 

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

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

相关文章

1 go语言环境的搭建

本专栏将从基础开始,循序渐进,由浅入深讲解Go语言,希望大家都能够从中有所收获,也请大家多多支持。 查看相关资料与知识库 专栏地址:Go专栏 如果文章知识点有错误的地方,请指正!大家一起学习,…

IT服务管理业务策划与实施:追求IT用户满意与持续改进

在当今的信息化时代,IT服务已成为企业运营不可或缺的一部分。有效的IT服务管理不仅能够提升企业运营效率,还能显著增强IT用户满意度。本文将围绕IT服务管理的业务策划与实施展开探讨,旨在为运维团队提供一套全面、系统的参考框架。 一、IT服…

AI在候选人评估中的作用:精准筛选与HR决策的助力

一、引言 随着科技的迅猛发展,人工智能(AI)技术已逐渐渗透到各个行业和领域,人力资源管理(HRM)亦不例外。在候选人评估的环节中,AI技术以其高效、精准的特性,正在逐步改变着传统的招…

el-table表格 及其el-pagination分页 封装及其使用

1、首页在components文件夹中新建table文件夹 table文件夹下table.vue全部代码&#xff1a; <template><el-table:stripe"stripe":row-key"handlerRowKey()":tree-props"treeProps":border"border":show-summary"showS…

Vue3相比于Vue2进行了哪些更新

1、响应式原理 vue2 vue2中采用 defineProperty 来劫持整个对象&#xff0c;然后进行深度遍历所有属性&#xff0c;给每个属性添加getter和setter&#xff0c;结合发布订阅模式实现响应式。 存在的问题&#xff1a; 检测不到对象属性的添加和删除数组API方法无法监听到需要对…

蓝桥杯单片机学习总结(Day15 超声波测距)

开启超声波模块测距方法&#xff1a; X20106A是一款红外线检波接收的专用芯片&#xff0c;常用于电视机红外遥控接收器。当CX20106A接收到40KHz的信号时&#xff08;第五脚200K的电阻决定了其频率为40KHz&#xff09;&#xff0c;会在OUT脚输出一个低电平下降脉冲。这个信号甚至…

IDEA打开终端报错Cannot open Local Terminal命令行功能

idea项目中不能打开命令行功能 IDEA打开终端报错Cannot open Local Terminal 意思是打开命令行发生错误 idea上配置shell终端&#xff0c;命令行页面 打开右上角 File–> setting–> Tools–> 终端 找到Shell 路径 文本框中原本是是powershell.exe&#xff0c;现在…

Java | Leetcode Java题解之第278题第一个错误的版本

题目&#xff1a; 题解&#xff1a; public class Solution extends VersionControl {public int firstBadVersion(int n) {int left 1, right n;while (left < right) { // 循环直至区间左右端点相同int mid left (right - left) / 2; // 防止计算时溢出if (isBadVers…

企业专线和家庭宽带的区别

企业专线&#xff08;也称为商业互联网服务&#xff09;与家庭宽带在多个方面存在区别&#xff0c;这些差异主要体现在网络性能、服务质量、价格、合同条款以及支持服务上。以下是两者的主要区别&#xff1a; 1、网络质量和速度&#xff1a; 企业专线通常提供更稳定、更快的网络…

虚拟机Ubuntu20.04 利用串口调试机械臂

虚拟机Ubuntu20.04 利用串口调试机械臂 串口库问题 由于机械臂使用的是串口进行驱动控制&#xff0c;在python中相关的串口库为serial和pyserial两个&#xff0c;这里我曾踩过雷同时安装了serial与pyserial两个库&#xff0c;导致报错如下所示&#xff1a; AttributeError: m…

Apache Tomcat文件包含漏洞复现(详细教程)

1.漏洞原理 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器&#xff0c;其安装后会默认开启ajp连接器&#xff0c;方便与其他web服务器通过ajp协议进行交互。属于轻量级应用服务器&#xff0c;在中小型系统和并发访问用户不是很多的场合下被普遍使用&#xff0c;是开发和…

责任链模式的应用与解析

目录 责任链模式责任链模式结构责任链模式适用场景责任链模式优缺点练手题目题目描述输入描述输出描述题解 责任链模式 责任链模式&#xff0c;亦称职责链模式、命令链&#xff0c;是一种行为设计模式&#xff0c;允许你将请求沿着处理者链进行发送。收到请求后&#xff0c;每…

韩顺平0基础学java——第36天

p715-735 反射调用速度慢 反射调用优化-关闭访问检查 1. Method和Field、Constructor对象都有setAccessible() 方法2. setAccessible作用是启动和禁用访问安全检查的开关 3&#xff0e;参数值为true表示反射的对象在使用时取消访问检查&#xff0c;提高反射的效率。参数值 为…

Redis核心技术与实战学习笔记

Redis核心技术与实战学习笔记 最近想沉下心来看下redis&#xff0c;买了蒋德钧老师的《Redis 核心技术与实战》,这里记录一些学习笔记 希望能够坚持下去有想一起学习的童鞋&#xff0c;可以点击跳转到文章尾部获取学习资源,仅供学习不要用于任何商业用途!!! redis知识全景图 …

2024-07-22 Unity AI行为树1 —— 框架介绍

文章目录 1 行为树2 行为树驱动方式3 行为树结点分类3.1 控制节点3.2 执行节点 4 行为树与状态机比较 本文章参考 B 站唐老狮 2023年直播内容。 点击前往唐老狮 B 站主页。 1 行为树 ​ 行为树&#xff08;Behavior Tree&#xff0c;BT&#xff09;在游戏 AI 中是一种用于控制…

精益管理意识与企业战略规划的匹配度如何评估?

众所周知&#xff0c;精益管理不仅要求企业在生产运营过程中实现资源的最大化利用&#xff0c;同时也强调企业战略规划的精准性和前瞻性。因此&#xff0c;评估精益管理意识与企业战略规划的匹配度&#xff0c;对于企业的长期发展至关重要。具体方法如深圳天行健企业管理咨询公…

springboot 项目整合 AI (文心一言)

百度智能云网址&#xff1a;https://cloud.baidu.com/?fromconsole 注册——个人认证——登录成功 第一步&#xff1a;点击千帆大模型平台 ​ 第二步&#xff1a;点击应用接入——创建应用 ​ 第三步&#xff1a;点击接口文档——API列表——可以点击指定模型进行查看调…

【中项】系统集成项目管理工程师-第4章 信息系统架构-4.4数据架构

前言&#xff1a;系统集成项目管理工程师专业&#xff0c;现分享一些教材知识点。觉得文章还不错的喜欢点赞收藏的同时帮忙点点关注。 软考同样是国家人社部和工信部组织的国家级考试&#xff0c;全称为“全国计算机与软件专业技术资格&#xff08;水平&#xff09;考试”&…

hamcrest 断言框架使用示例和优势分析

引言 在软件测试领域&#xff0c;断言是验证代码行为是否符合预期的关键环节。Hamcrest 断言框架&#xff0c;以其独特的匹配器&#xff08;Matcher&#xff09;概念和清晰的失败信息&#xff0c;赢得了广泛的赞誉。尽管 Python 标准库中没有内置的 Hamcrest 库&#xff0c;但…

【前端新手小白】学习Javascript的【开源好项目】推荐

目录 前言 1 项目介绍 1.1 时间日期类 1.2 网页store类 1.3 事件类 1.4 Number类 1.5 String类 1.6 正则验证类 1.7 ajax类 1.8 data数据类 1.9 browser浏览器类 2 学习js-tool-big-box开源项目时有哪些收获 2.1 你可以这样做 2.2 如果你需要使用本项目 2.3 你…