springBoot是如何实现自动装配的

目录

1 什么是自动装配

2 Spring自动装配原理

 2.1 @SpringBootConfiguration

​编辑 2.2 @EnableAutoConfiguration

 2.2.1 @AutoConfigurationPackage

2.2.2  @Import({AutoConfigurationImportSelector.class})

 2.3 @ComponentScan


1 什么是自动装配

        自动装配就是将官方写好的的配置类加载到spring容器,然后根据配置类生成一些项目所需要的bean对象。(对于springBoot来讲,就是从spring.factories文件获取到对应需要进行自动装配的类,并生成相应的bean对象交给spring管理。)

2 Spring自动装配原理

要想搞明白spring自动装配的原理,就需要从我们springBoot上启动类的注解入手。

@SpringBootApplication 

该注解是springBoot启动类的一个注解,是一个组合注解,主要作用就是说明这个类是springBoot的主配置类。该注解主要由三个注解组成

@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

 2.1 @SpringBootConfiguration

这个注解包含了@Configuration,@Configuration里面又包含了一个@Component,也就是说这个注解标记在哪个类上,那么这个类就是spring的配置类。

 2.2 @EnableAutoConfiguration

这个注解是开启了自动配置的功能

 2.2.1 @AutoConfigurationPackage

这个注解的作用就是将主配置类(就是有SpringBootApplication标注的类)的所在包以及子包里面的所有容器扫描并加载到spring容器里面,这也就是为什么平时在springboot开发时,我们缩写的controller层和service路径都与朱配置类同级或者次级的原因。

2.2.2  @Import({AutoConfigurationImportSelector.class})

上个注解是将所有的组件都加载到了容器里面,那这个注解就是将所有需要自动装配的类以全类名的形式返回,那么接下里我们就来说一说哪些是需要自动装配的类。

1.AutoConfigurationImportSelector类中有一个selectImports()方法,该方法又调用了getAutoConfigurationEntry这个方法,如下:

 2 getAutoConfigurationEntry()方法中又调用了getCandidateConfigurations()这个方法

 3 在getCandidateConfigurations()方法中又调用了loadFactoryNames()方法

 4 在loadFactoryNames()方法中又调用了loadSpringFactories()方法

 5 在loadSpringFactories() 方法中加载了META-INF目录下的spring.factories文件

 6 在META-INF/spring.factories这个文件里面的数据是以键=值的方式存储,然后解析这些文件

 2.3 @ComponentScan

这个注解的作用就是扫描当前包及子包的注解

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

企业数据库遭到360后缀勒索病毒攻击,360勒索病毒解密

在当今数字化时代,企业的数据安全变得尤为重要。随着数字化办公的推进,企业的生产运行效率得到了很大提升,然而针对网络安全威胁,企业也开始慢慢引起重视。近期,我们收到很多企业的求助,企业的服务器遭到了…

Node.js学习笔记-04

这第九章也是个大重点 九、玩转进程 Node在选型时决定在V8引擎之上构建,也就意味着它的模型与浏览器类似。 本章关于进程的介绍和讨论将会解决如下两个问题: 单进程单线程并非完美,如今CPU基本均是多核的,真正的服务器&#xf…

如何使用CSS实现一个平滑过渡效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现平滑过渡效果⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣、刚…

如遭遇DDoS等攻击会对企业和个人造成严重影响,包括以下

1. 服务不可用:正常用户无法访问目标服务器,导致业务中断,影响用户体验。 2. 数据泄露:攻击者可能会在攻击过程中窃取用户数据,导致隐私泄露和财产损失。 3. 经济损失:由于服务中断,企业可能遭受…

期权就是股指期货吗,哪个好做一点?

近年来,场内ETF期权产品不断扩大,越来越多的投资者有投资期权的想法。当我们看到期权时,我们会不知不觉地想到期货,虽然期货与期权只有一个字的区别,但实际上有很大的不同,那么期权就是股指期货吗&#xff…

关于小程序收集用户手机号行为的规范

手机号在日常生活中被广泛使用,是重要的用户个人信息,小程序开发者应在用户明确同意的前提下,依法合规地处理用户的手机号信息。 而部分开发者在处理用户手机号过程中,存在不规范收集行为,影响了用户的正常使用体验&a…

ElasticSearch-安装部署全过程

本文已收录于专栏 《中间件合集》 目录 概念说明什么是ElasticSearch什么是Kibana什么是RESTful API 提供服务安装过程安装ElasticSearch1.下载ElasticSearch 安装包2.解压安装包3.进入解压之后的文件夹4.创建一个data文件夹用来存储数据5.进入config文件夹编辑elasticsearch.y…

算法通关村第八关——轻松搞定翻转二叉树

二叉树有很多经典算法题,今天我们就来看一下二叉树里的翻转问题。 力扣226,给了一棵二叉树,要将二叉树整体翻转。 分析:观察图中翻转前后的二叉树,我们不难发现,翻转过程中,只需要把每一个节点的左右子节点…

【Unity细节】Unity中的层级LayerMask

👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 😶‍🌫️收录于专栏:unity细节和bug 😶‍🌫️优质专栏 ⭐【…

1849. 将字符串拆分为递减的连续值;1024. 视频拼接;1530. 好叶子节点对的数量

1849. 将字符串拆分为递减的连续值 核心思想:递归回溯题。和842. 将数组拆分成斐波那契序列的代码是差不多的,遇到拆分题首先想的就是dfs(index)表示从index开始拆分是否可以,然后去枚举拆分的end即可,我把这种题目归纳为拆分题,…

leetcode 518. 零钱兑换 II

本题是背包问题系列的完全背包问题,和0-1背包唯一的区别就在于:物品是可以重复选取的。 经过之前背包问题的拷打,本题也是一遍AC了。 接下来将给出二维和一维两种做法。 二维dp数组做法: 本题的背包大小即为题中给出的总金额&am…

“一日之际在于晨”,欢迎莅临WAVE SUMMIT上午场:Arm 虚拟硬件早餐交流会

8月16日,盛夏的北京将迎来第九届WAVE SUMMIT深度学习开发者大会。在峰会主论坛正式开启前,让我们先用一份精美的元气早餐,和一场“Arm虚拟硬件交流会”,唤醒各位开发小伙伴的开发魂! 8月16日,WAVE SUMMIT大…

【力扣每日一题】2023.8.18 3n块披萨

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个披萨,分成了3n块,每次我们可以选择一块,而我们的两个小伙伴会拿走我们选的披萨的相邻的…

1x1 卷积:解释器

一、说明 在这篇博客中,我们将尝试深入探讨 1x1 卷积操作的概念,该概念出现在 Lin等人 (2013) 的论文“网络中的网络”和 Szegedy 等人 (2014) 的论文“Go Deep with Convolutions” 中,该论文提…

工作流自动化:提升效率、节约成本的重要工具

在现代社会中,软件和技术的运用使得我们的日常活动变得更加简单和高效。然而,这些技术也有自身的特点和独特之处。尽管我们使用这些工具来简化工作,但有时仍需要一些人工干预,比如手动数据录入。在工作场所中,手动数据…

Dockerfile概念、镜像原理、制作及案例讲解

1.Docker镜像原理 Linux文件操作系统讲解 2.镜像如何制作 3.Dockerfile概念 Docker网址:https://hub.docker.com 3.1 Dockerfile关键字 4.案例

pytest数据驱动 pandas

pytest数据驱动 pandas 主要过程:用pandas读取excel里面的数据,然后进行百度查询,并断言 pf pd.read_excel(data_py.xlsx, usecols[1,2])print(pf.values)输出:[[‘听妈妈的话’ ‘周杰伦’] [‘遇见’ ‘孙燕姿’] [‘伤心太平…

Linux 修改信号的响应方式

修改信号的响应方式 1.signal()方法介绍: 修改信号的响应方式要用到方法signal()。需要引用头文件signal.h。signal()的原型: typedef重命名了一个函数指针的类型,这个指针的类型为指向一个参数为int返回值为void的函数的指针。这个函数指针…

Vue编写表单常用操作(过滤和排序)

目录 HTML代码&#xff1a; js代码&#xff1a; 效果展示&#xff1a; 此次的编写代码可以直接使用 HTML代码&#xff1a; <body><div id"app"><div v-for"(value,key) in person">{{key}}--{{value}}</div><div>商品名…

[10min速通]STM32CubemMX配置W25Q128

[10min速通]&#x1f98f;STM32CubemMX配置W25Q128 文章目录 [10min速通]&#x1f98f;STM32CubemMX配置W25Q1281、下载源码2、配置Cube2.1 基础配置2.2 SPI配置 3、配置MDK3.1 添加源文件3.2 管理源文件3.3 完成接口配置 4、接口介绍4.1 初始化4.2 擦除4.3 写入4.4 读取 5、代…