【SpringBoot篇】springboot的自动装配原理

文章目录

  • 🏳️‍🌈什么是自动装配
  • 🌹SpringBoot的自动装配
  • 🍔具体操作

在这里插入图片描述

🏳️‍🌈什么是自动装配

自动装配(Auto-Configuration)是Spring Boot框架的一个核心特性之一,它通过扫描应用程序的classpath和依赖关系,自动配置和装配Spring应用程序所需的各种组件

在传统的Spring应用程序中,开发者需要手动配置大量的bean,例如数据源、事务管理器、视图解析器等。这些配置过程繁琐而容易出错,加大了开发难度和成本。而Spring Boot的自动装配机制则能够自动完成这些配置过程,使得开发者可以更加专注于业务逻辑的实现。

Spring Boot的自动装配实现了以下目标:

  • 简化配置:Spring Boot的自动装配能够根据应用程序的需求和条件,自动配置所需的组件,避免了繁琐的手动配置过程。
  • 减少出错:由于自动装配是基于条件化配置的,因此可以避免手动配置过程中出现的错误和疏漏。
  • 提高效率:自动装配能够提高开发效率,减少开发时间和成本。
  • 提升可维护性:自动装配使得应用程序的配置更为规范和标准化,提高了可维护性和可扩展性。

总之,自动装配是Spring Boot的一个重要特性,通过自动配置和装配所需的组件,使得开发者可以更加专注于业务逻辑的实现,提高了开发效率、减少了出错的可能性,并提升了应用程序的可维护性和可扩展性。

🌹SpringBoot的自动装配

当我们使用Spring Boot开发应用程序时,不需要手动配置许多繁琐的细节,而是通过自动装配来简化配置过程。下面将详细解析Spring Boot自动装配的原理和机制:

  • 条件注解(Conditional Annotation):Spring Boot使用条件注解来确定是否需要进行自动配置。条件注解基于条件评估,根据一定的条件来判断是否需要进行自动配置。常见的条件注解包括@ConditionalOnClass、@ConditionalOnMissingBean、@ConditionalOnProperty等。
  • 自动装配启动过程:在Spring Boot启动过程中,会扫描应用程序的classpath以及依赖关系,根据条件注解的判断结果来决定是否需要进行自动配置。
  • Spring Boot Starter依赖:Spring Boot提供了一系列的Starter依赖,每个Starter依赖都定义了一组常用的依赖库,例如spring-boot-starter-web、spring-boot-starter-data-jpa等。这些Starter依赖通过自动配置机制,将所需的组件进行自动装配。
  • 自动配置类(Auto-Configuration Class):每个Starter依赖都包含一个或多个自动配置类,这些自动配置类使用条件注解来判断是否需要进行自动配置。自动配置类通常包含@Configuration注解,其中定义了各种bean的创建和配置。
  • 自动配置的优先级:在多个自动配置类中,可能存在相同类型的bean的创建和配置。Spring Boot使用自动配置的优先级来决定哪个自动配置类的设置会生效。一般来说,后加载的配置类会覆盖前面的配置类。开发者也可以通过自定义配置来覆盖默认的自动配置。
  • 自定义配置:如果应用程序需要对自动配置进行修改或扩展,可以提供自己的配置类。这样可以通过编写自定义的bean来替换或扩展自动配置中的默认行为。

通过自动装配,Spring Boot能够根据应用程序的需求和条件,快速配置并装配所需的组件,使开发者能够专注于业务逻辑而不必过多关注繁琐的配置细节。同时,开发者也可以根据需要进行自定义配置,灵活地调整自动配置的行为。

总结:Spring Boot的自动装配通过条件注解、自动配置类和Starter依赖等机制,根据条件判断和优先级规则来自动配置和装配应用程序所需的组件。这种方式简化了配置过程,提高了开发效率,同时也保留了灵活性,允许开发者进行自定义配置。

🍔具体操作

在SpringBoot的启动类上加上@SpringBootApplication注解,就可以首先自动装配
@SpringBootApplication其实是一个复合注解,真正去首先自动装配的注解是@EnableAutoConfiguration
在这里插入图片描述

自动装配的实现主要依靠3个核心的关键技术

  • 引入starter,启动依赖组件的时候,这个组件里面必须要包含一个@Configuration配置类,而在这个配置类中,我们需要通过@Bean这个注解去声明需要装配到IOC容器里面的Bean对象
    在这里插入图片描述

  • 这个配置类是放在第三方的jar包里面的,然后通过SpringBoot中约定优于配置的这样一个理念,去把这个配置类的全路径放在classpath:/META-INF/spring.factories文件里面,这样子SpringBoot就可以知道第三方jar包里面这个配置类的位置(这个步骤主要用到了Spring里面的SpringFactoriesLoader来完成的)

  • SpringBoot拿到所有第三方jar包里面声明的配置类以后,再通过Spring提供的ImportSelector这一个接口来实现对这些配置类的动态加载,从而完成了自动装配

请添加图片描述

这样子,让开发人员可以更加聚焦在业务代码的编写上,而不需要去关心和业务无关的配置

在技术的道路上,我们不断探索、不断前行,不断面对挑战、不断突破自我。科技的发展改变着世界,而我们作为技术人员,也在这个过程中书写着自己的篇章。让我们携手并进,共同努力,开创美好的未来!愿我们在科技的征途上不断奋进,创造出更加美好、更加智能的明天!

在这里插入图片描述

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

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

相关文章

分布式websocket IM聊天系统相关问题问答【第九期】

前言 上期视频讲解了自己关于聊天系统的设计的时候出现了一些不一样的声音。不了解情况的可以看上上期视频。这期主要是讨论。IM聊天系统设计方案多。我的先说明一下自己的技术背景互相之间才能更好的理解。 本期对应视频 目前已经写的文章有。并且有对应视频版本。 git项目地…

在 Linux 上搭建 Java 环境

目录 一、安装jdk 1. 挑选 jdk 版本 2. 安装 3. 验证 jdk 二、安装tomcat 1. 下载压缩包 2. 上传压缩包给 Linux (需要用到 rz 命令) 3. 解压压缩包(需要用到 unzip) 4. 进入 bin 目录 5. 给启动脚本增加可执行权限 6. 启…

k8s学习(RKE+k8s+rancher2.x)成长系列之概念介绍(一)

一、前言 本文使用国内大多数中小型企业使用的RKE搭建K8s并拉起高可用Rancher2.x的搭建方式,以相关技术概念为起点,实际环境搭建,程序部署为终点,从0到1的实操演示的学习方式,一步一步,保姆级的方式学习k8…

加载服务端发送的模型文件_unity开发进阶

加载服务端发送的模型文件 前言一、服务端搭建二、unity请求文件三、加载模型结语 前言 之前我们学习制作的都是离线状态下的东西,今天我们学习制作一个小demo。 内容就是我们用unity请求后台,接受后台发送过来的模型,然后将模型加载到场景中…

Mac使用adb调试安卓手机

0x00 背景 最近windows电脑休息,用mac办公比较多,手机用时间长了,不太灵光,准备修理一番。于是要用mac调试下android手机。配置略显麻烦,网上的步骤多参差不齐。估计是入门步骤,大佬们也懒得写的太细。于是…

开发微信小程序,将图片下载到相册的方法,saveImageToPhotosAlbum怎么用

在开发微信小程序的时候,经常能看到小程序里面有下载按钮,如何将小程序中的图片下载到手机相册中那,下面给大家说一下怎么做,代码如何去写。 一、到微信小程序后台开启“用户隐私保护指引” 1.进入小程序后台,侧拉拉到…

Unity动画桢事件

1,使用原因 在新项目内部审核的时候,说什么动画节奏不匹配,所以决定用动画桢事件来处理技能释放。当释放技能的时候,先播放技能动画,然后再动画桢所在的时间戳执行技能的逻辑。 2,具体实现 1,…

单调性的应用

1单调性 应用场景&#xff1a;常应用于双指针的进一步优化问题中含义&#xff1a;针对指针 i 1 > i i1>i i1>i一定有 j 1 > j j1>j j1>j或者 j 1 < j j1<j j1<j这样我们就可以利用该性质对算法进行进一步优化&#xff0c;避免一些不必要的遍历…

Linux下安装MySQL5.7的客户端

目录 1、简介 2、将软件上传到指定的位置 3、安装 3.1、centos7中是有自带MySQL数据库的&#xff0c;我们首先得先卸载它 3.2、安装 mysql-community-common-8.0.33-1.el9.x86_64.rpm 3.3、安装mysql-community-client-plugins-8.0.33-1.el7.x86_64.rpm 3.4、安装 mysq…

计算机网络自顶向下Wireshark labs1-Intro

Wireshark labs1 实验文档&#xff1a;http://www-net.cs.umass.edu/wireshark-labs/Wireshark_Intro_v8.0.pdf 介绍 加深对网络协议的理解通常可以通过观察协议的运行和不断调试协议来大大加深&#xff0c;具体而言&#xff0c;就是观察两个协议实体之间交换的报文序列&…

【通过docker安装常用软件镜像】1.镜像 2.安装 redis,jdk,nginx

1)官网镜像网站 hello-world - Official Image | Docker Hub 2)安装镜像测试例子 Redis 1.查询redis [rootlocalhost ~]# docker search redis NAME DESCRIPTION STARS OFFICIAL redis …

CSS 实现 flex布局最后一行左对齐的方案「多场景、多方案」

目录 前言解决方案场景一、子项宽度固定&#xff0c;每一行列数固定方法一&#xff1a;模拟两端对齐方法二&#xff1a;根据元素个数最后一个元素动态margin 场景二、子项的宽度不确定方法一&#xff1a;直接设置最后一项 margin-right:auto方法二&#xff1a;使用:after(伪元素…

Linux常见的管理命令

1. whoami 作用&#xff1a; 显示出当前有效的用户名称&#xff0c;Linux是多用户多任务 语法&#xff1a;whoami(选项) 选项&#xff1a; --help&#xff1a;在线帮助 --version&#xff1a;显示版本信息和退出 场景使用&#xff1a; 1. 当用户想要查看当前登录系统的用户…

EHS管理系统为何需要物联网的加持?

EHS是Environment、Health、Safety的缩写&#xff0c;是从欧美企业引进的管理体系&#xff0c;在国外也被称为HSE。EHS是指健康、安全与环境一体化的管理。 而在国内&#xff0c;整个EHS市场一共被分成三类&#xff1b; 一类是EHS管培体系&#xff0c;由专门的EHS机构去为公司…

Dlearning

Deep Learning Basic 神经网络&#xff1a; #mermaid-svg-rR22a8Udy5SxGOoP {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-rR22a8Udy5SxGOoP .error-icon{fill:#552222;}#mermaid-svg-rR22a8Udy5SxGOoP .error-t…

2016年认证杯SPSSPRO杯数学建模B题(第一阶段)低分辨率下看世界全过程文档及程序

2016年认证杯SPSSPRO杯数学建模 B题 低分辨率下看世界 原题再现&#xff1a; 数码摄像技术被广泛使用于多种场合中。有时由于客观条件的限制&#xff0c;拍摄设备只能在较低的分辨率下成像。为简单起见&#xff0c;我们只考虑单色成像。假设成像的分辨率为 32 64&#xff0c…

Make.com的发送邮件功能已经登峰造极

make.com的发送邮件功能已经做到了登峰造极。 我给你个任务&#xff0c;让你发送个新邮件给谁谁&#xff0c;你一定想到SMTP服务器不就行了。 我给你第二个任务&#xff0c;我让你自动回复一个邮件&#xff0c;注意是回复。 做不到了吧&#xff5e;&#xff5e;&#xff01;…

【C++干货铺】常用的特殊类——饿汉模式和懒汉模式

个人主页点击直达&#xff1a;小白不是程序媛 C系列专栏&#xff1a;C干货铺 代码仓库&#xff1a;Gitee 目录 请设计一个类&#xff0c;不能被拷贝 请设计一个类&#xff0c;只能在堆上创建对象 请设计一个类&#xff0c;只能在栈上创建对象 请设计一个类&#xff0c;不…

HarmonyOS 鸿蒙应用开发( 六、实现自定义弹窗CustomDialog)

自定义弹窗&#xff08;CustomDialog&#xff09;可用于广告、中奖、警告、软件更新等与用户交互响应操作。开发者可以通过CustomDialogController类显示自定义弹窗。具体用法请参考自定义弹窗。 在应用的使用和开发中&#xff0c;弹窗是一个很常见的场景&#xff0c;自定义弹窗…

【Leetcode】2859. 计算 K 置位下标对应元素的和

文章目录 题目思路代码结果 题目 题目链接 给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。 请你用整数形式返回 nums 中的特定元素之和 &#xff0c;这些特定元素满足&#xff1a;其对应下标的二进制表示中恰存在 k 个置位。 整数的二进制表示中的 1 就是这个整数的…