【Spring Boot | 第一篇】Spring Boot 原理

news2024/11/19 13:41:47

前言:

当今互联网时代,随着软件开发的快速发展,开发者们迫切需要一个简单、高效、可扩展的框架来提升开发效率和质量。Spring Boot作为一款备受欢迎的Java框架,应运而生。

Spring Boot以其优雅的设计和丰富的功能,成为了众多开发者的首选。它不仅简化了传统Java开发的繁琐,还提供了丰富的开箱即用的特性,让开发者能够更专注于业务逻辑的实现。

作为了解Spring Boot原理的入门,了解其设计理念和工作原理是至关重要的。在本文中,我们将深入探讨Spring Boot的原理和核心概念,帮助读者更好地理解这个强大的框架。

目录

前言:

起步依赖:

自动配置:

 自动配置原理:

总结:


 

我们讲解Spring Boot的原理,主要就是 在讲解两个重要的板块:起步依赖自动配置

起步依赖:

        起步依赖(Starter Dependencies)是Spring Boot框架中一个核心概念,它的设计旨在简化构建基于Spring Boot的应用程序的过程。起步依赖可以理解为一种预配置的依赖关系集合,它们封装了常用的框架和库,并提供了适当的默认设置,以便开发者能够快速、轻松地引入所需的功能和特性。

相比于传统的依赖管理方式,起步依赖为开发者提供了更高层次的抽象。通过引入适当的起步依赖,开发者无需手动配置和调整大量的依赖关系,而是可以直接使用开发所需的功能。起步依赖通过自动配置和自动装配,减少了开发者的配置工作量,极大地简化了开发过程。

简而言之,Spring Boot的起步依赖简化了我们在java web中繁琐的导入依赖操作,采取层次性的导入依赖,使得我们需要导入的依赖项大大减少

而起步依赖的核心原理就是Maven的依赖传递 

自动配置:

在Spring Boot中,自动配置(Auto-Configuration)是一个核心特性,它旨在简化应用程序的配置过程。通过自动配置,Spring Boot可以根据应用程序的依赖和环境自动推断和配置各种功能和设置,减少了开发者手动进行繁琐配置的工作量。

简而言,就是Spring Boot自动的替我们完成了一些bean和配置类的各项操作,简化了我们的操作。

我们可以在IDEA中清晰的看到Spring Boot对象为我们自动配置了大量的Bean对象和配置类:

 自动配置原理:

Spring Boot的自动配置原理基于条件化配置,即根据一定的条件判断是否需要自动配置某个功能或组件。以下是自动配置的详细原理介绍:

  1. 条件注解:

    • Spring Boot使用条件注解(Conditional Annotation)来定义自动配置的条件。
    • 常用的条件注解包括@ConditionalOnClass、@ConditionalOnBean、@ConditionalOnProperty等。
    • @ConditionalOnClass用于在类路径中存在指定类时生效,@ConditionalOnBean用于在容器中存在指定Bean时生效,@ConditionalOnProperty用于在指定的属性被配置时生效,等等。
  2. 条件评估:

    • Spring Boot在启动过程中会对自动配置的条件进行评估。
    • 首先,它通过类加载器和类路径扫描机制来确定类路径中是否存在某个类或资源,或者是否存在指定的Bean。
    • 然后,它根据配置文件中的属性来判定是否满足某个条件。
    • 最后,根据以上条件的结果,决定是否要执行自动配置。
  3. 自动配置类:

    • Spring Boot通过自动配置类(Auto-Configuration Class)来实现自动配置。
    • 自动配置类使用了@Configuration注解,并配合各种条件注解,如@ConditionalOnClass、@ConditionalOnBean等,来定义自动配置的条件。
    • 在自动配置类中,会定义一系列的Bean和相关的配置,例如数据源、JPA实体管理器、Web安全配置等。
  4. 自动装配:

    • 当自动配置类满足条件时,Spring Boot会根据配置类中的定义自动创建并装配相应的Bean。
    • 自动装配过程是基于Spring的依赖注入机制实现的,通过@Configuration和@Bean注解来声明和创建Bean。
    • 自动装配能够将需要的Bean注入到应用程序中的其他Bean中,使得开发者可以直接使用。

总之,Spring Boot的自动配置通过条件化配置的机制,根据类路径、存在的Bean、配置属性等条件来判断是否需要自动配置某个功能或组件。通过自动配置类和自动装配的方式,Spring Boot可以根据条件自动创建和注入所需的Bean,减少了开发者的配置工作量,简化了应用程序的构建和配置过程。

总结:

通过本文的介绍,我们对Spring Boot的原理有了更深入的了解。Spring Boot的核心特性之一是自动配置,它通过条件化配置的方式,根据类路径、存在的Bean、配置属性等条件来判断是否需要自动配置某个功能或组件。

自动配置的原理基于条件注解,如@ConditionalOnClass、@ConditionalOnBean、@ConditionalOnProperty等。这些条件注解在启动过程中进行评估,根据类的存在、Bean的存在和配置属性的设置结果,决定是否执行自动配置。

自动配置类则是实现自动配置的关键,通过@Configuration和@Bean注解来声明和创建Bean。在自动配置类中,会定义一系列的Bean和相关的配置,例如数据源、JPA实体管理器、Web安全配置等。

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

69e9169c980f43e0aad31ff9ada88a9c.png

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

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

相关文章

2023年中国铁路行车监测系统竞争格局、市场规模及行业发展趋势分析[图]

铁路行车监测系统是对铁路列车及车载设备运行状态全面监测的车载行车安全系统,是智能化、自动化等技术在铁路行业的具体应用。行车监测系统主要包括机车车载安全防护系统(简称6A系统)、机车远程监测与诊断系统(简称CMD系统&#x…

编译工具链 之二 详解 ELF 格式及标准、UNIX 发展、ABI

在计算机及嵌入式系统中,二进制文件也有一定的标准格式,通常会包含在各平台的应用程序二进制接口 (Application Binary Interface,ABI)规范中。它是编译工具链必须要遵守的规范(编译工具链产生符合 ABI 的二…

【数字图像处理第四版课后习题答案】第2章 数字图像基础(含英文原版)

2.1暂无 2.2 翻译答案 如图 P2.3 所示,视网膜图像中与点相对应的直径 x 是由类似的三角形得到的。即 得出 x 0.085d。根据第 2.1 节中的讨论,并结合一些自由解释,我们可以将眼窝视为一个方形传感器阵列,拥有大约 337,000 个元素…

6-3 递增的整数序列链表的插入 分数 5

List Insert(List L, ElementType X) {//创建结点List node (List)malloc(sizeof(List));node->Data X;node->Next NULL;List head L->Next; //定位real头指针//空链表 直接插入if (head NULL) {L->Next node;node->Next head;return L;}//插入数据比第…

一文全面解读CKA认证的含金量、详细介绍!

K8s是目前最流行的开源容器编排引擎,在全球都得到了广泛应用,BAT、京东、360、华为、网易、IBM、知乎等国内外诸多知名公司都在基于K8s构建企业容器云平台,支撑公司业务,越来越多的企业也都在向K8s迁移。相信在不远的将来&#xf…

winform中DevExpress控件一些属性

1.DevExpress控件bar去掉前面四点和后面的倒三角。 如图。设置bar属性optionsBar→allowQuickCustomizationFALSE

Leetcode hot 100之前缀和、差分数组、位运算

目录 差分数组-区间增减 和为K的子数组:前缀和 哈希表优化 除自身以外数组的乘积:前后缀区间 差分数组-区间增减 想对区间 nums[i..j] 的元素全部加 3,那么只需要让 diff[i] 3,然后再让 diff[j1] - 3 和为K的子数组&#x…

广州华锐互动:VR动物解剖实验室带来哪些便利?

随着科技的不断发展,我们的教育方式也在逐步变化和进步。其中,虚拟现实(VR)技术的应用为我们提供了一种全新的学习方式。尤其是在动物解剖实验中,VR技术不仅能够增强学习的趣味性,还能够提高学习效率和准确性。 由广州华锐互动开发…

Web_python_template_injection SSTI printer方法

这题挺简单的 就是记录一下不同方法的rce python_template_injection ssti了 {{.__class__.__mro__[2].__subclasses__()}} 然后用脚本跑可以知道是 71 {{.__class__.__mro__[2].__subclasses__()[71]}} 然后直接 init {{.__class__.__mro__[2].__subclasses__()[71].__i…

实战纪实 | 某米企业src未授权访问

公众号:掌控安全EDU 分享更多技术文章,欢迎关注一起探讨学习 某米企业src漏洞挖掘 这一挖就挖到了一个未授权操作漏洞,写个文章记录下~~ 通过信息收集,发现这么一个资产。 访问 http://xxx.com 如下图所示 1.点击头像-点击授权登…

【SQL Server】表死锁/解锁和sql语句分析

文章目录 表死锁查询锁的进程解锁 sql语句分析来源 表死锁 查询锁的进程 1 首先创建一个测试用的表: CREATE TABLE Test ( TID INT IDENTITY(1,1) ) 2 执行下面的SQL语句将此表锁住: SELECT * FROM Test WITH (TABLOCKX) 3 通过下面的语句可以查看…

【CMU15-445 Part-17】Two-Phase Locking

Part17-Two-Phase Locking Lock Types S-LOCK 共享锁 for reads X-LOCK 排他锁 for writes 上述T1最后R(A) 会导致不可重复读 2PL 允许数据库系统始终以保证Conflict Serializable schedule情况下分发lock Phase #1 Growing 每个txn请求locks 从lock managerlock manager…

万界星空科技云MES系统生产全流程追溯功能介绍

制造业工厂产品质量贯穿于产品的整个生命周期,也是企业参与市场竞争求生存求发展的基础,而制造过程中出现的产品质量问题则是产品最终质量的基石。 随着全球市场竞争的进一步加剧和制造业信息化进程的加快,企业对产品制造过程的质量信息管理…

1876. 长度为三且各字符不同的子字符串

1876. 长度为三且各字符不同的子字符串 C代码&#xff1a;滑动窗口 // 存在三种字符&#xff0c;且不重复、子串数量 int countGoodSubstrings(char * s){int k 3;int hash[26] {0};int len 0;int l 0;int ans 0;for (int i 0; i < strlen(s); i) {hash[s[i] - a];if…

c#设计模式-行为型模式 之 策略模式

&#x1f680;简介 &#x1f424;作为一个开发人员&#xff0c;开发需要选择一款开发工具&#xff0c;如在编写C#时&#xff0c;我们可以选择VisualStudio进行开发&#xff0c;也可以使用Rider 进行开发。 &#x1f433;该模式定义了一系列算法&#xff0c;并将每个算法封装起来…

最新天津python培训机构 Python培训的重要性

Python编程语言近年来备受瞩目&#xff0c;其简洁、易学、多用途的特点受到了众多程序员的喜爱。随着Python的普及程度不断提高&#xff0c;越来越多的人开始关注和学习Python。 Python培训的重要性 Python作为一门编程语言&#xff0c;具有广泛的应用领域&#xff0c;如数据…

linux5.10的一个警告Kernel image misaligned at boot, please fix your bootloader!

平台&#xff1a;rk3399linux5.10 问题&#xff1a;发现启动时有一个内核警告信息 Kernel image misaligned at boot, please fix your bootloader! 后面的数字是我打印的地址信息。 不知道这个内核搞一个这样的警告是什么原因&#xff0c;我就没有继续深挖啦。 一、通过搜…

解决若依框架多次list查询时,分页失效问题

一、问题背景 当若依框架遇到两次及以上的list查询时,会引发分页查询失效问题,如下图: 二、分析原因 分页查询原理 Mybatis的分页原理&#xff0c;大致就是使用MyBatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的 SQL,然后重写 SQL&#xff0c;实现分页…

生命不息,分享不止,5款小巧的免费软件

​ 今天继续分享5个超实用的小工具&#xff0c;都是非常小巧精致的免费软件。 1.3D渲染和动画——Luxion KeyShot ​ Luxion KeyShot是一款专业的3D渲染和动画软件&#xff0c;它可以快速地创建逼真的视觉效果。KeyShot支持多种3D格式&#xff0c;可以导入任何模型&#xff0…