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

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

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

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

相关文章

vue-cli前端工程化——创建vue-cli工程 router版本的创建 目录结构 案例初步

目录 引出创建vue-cli前端工程vue-cli是什么自动构建创建vue-cli项目选择Vue的版本号 手动安装进行选择创建成功 手动创建router版多了一个router 运行测试bug解决 Vue项目结构main.jspackage.jsonvue.config.js Vue项目初步hello案例 总结 引出 1.vue-cli是啥,创建…

记一次项目内存优化--内存泄漏

需求–内存泄漏优化,PSS有所下降, OOM率减少 主要是与某个版本作基准进行对比(一般是最新版本的前一个版本作原数据),优化后,PSS有所下降,线上OOM率减少(Bugly版本对比)…

程序员如何利用公网远程访问查询本地硬盘【内网穿透】

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《高效编程技巧》《cpolar》 ⛺️生活的理想,就是为了理想的生活! 公网远程访问本地硬盘文件【内网穿透】 文章目录 公网远程访问本地硬盘文件【内网穿透】前言1. 下载cpolar和Everything软件1.…

(stm32)低功耗模式

低功耗模式 执行哪个低功耗模式的程序判断流程 标志位设置操作一定要在WFI/WFE之前,调用此指令后立即进入睡眠判断流程 模式对比 睡眠模式 停止模式 待机模式

FLatten Transformer

FLatten Transformer: Vision Transformer using Focused Linear Attention ICCV 2023 聚焦式线性注意力模块 关于Transformer 在Transformer模型应用于视觉领域的过程中,降低自注意力的计算复杂度是一个重要的研究方向。线性注意力通过两个独立的映射函数来近似S…

3 Python的数据类型

概述 在上一节,我们介绍了Python的基础语法,包括:编码格式、标识符、关键字、注释、多行、空行、缩进、引号、输入输出、import、运算符、条件控制、循环等内容。Python是一种动态类型的编程语言,这意味着当你创建一个变量时&…

react 生命周期方法

组件的生命周期 每个组件都包含 “生命周期方法”,你可以重写这些方法,以便于在运行过程中特定的阶段执行这些方法。你可以使用此生命周期图谱作为速查表。在下述列表中,常用的生命周期方法会被加粗。其余生命周期函数的使用则相对罕见。 挂…

Windows Oracle21C与PLSQL Developer 15配置

1、下载Oracle21c并安装 下载地址:https://www.oracle.com/database/technologies/oracle21c-windows-downloads.html 2、下载PLSQL Developer 15并安装 下载地址:https://www.allroundautomations.com/products/pl-sql-developer/#pricing 3、配置O…

在线课堂录播直播管理系统SpringBoot+Vue

在线课堂录播直播管理系统SpringBootVue 文章目录 在线课堂录播直播管理系统SpringBootVue共三个端:后端、后台管理系统、前端,如要学习看评论区(全部源码、文档、数据库)。内置功能一、前端二、后台管理三、后端--代码全有。四、…

数据结构—排序

8.排序 8.1排序的概念 什么是排序? 排序:将一组杂乱无章的数据按一定规律顺序排列起来。即,将无序序列排成一个有序序列(由小到大或由大到小)的运算。 如果参加排序的数据结点包含多个数据域,那么排序往…

async和await

一,基本使用 其实就是之前学过的异步函数,异步编程在函数前写一个ansyc,就转化为异步函数,返回的是一个promise对象,于是就可以使用await关键字,可以把异步函数写成同步函数的形式,极大地提高代…

LVS-DR的RS进行ARP抑制的原因和LVS持久连接配置

一.RS的ARP抑制 1.为什么要抑制 2.如何抑制 (1)修改/etc/sysctl.conf文件,增加以下内容 (2)命令行临时设置 二.LVS持久连接 1.客户端持久连接 2.端口持久连接 3.防火墙标记持久连接 一.RS的ARP抑制 1.为什么要…

学校信息管理系统说明文档

目录 0学生信息管理系统体验教程. 4 0.0Student management异地打开方法:. 4 1. 管理系统设计需求分析. 6 1.1 需求介绍. 6 1.2功能需求. 6 1.2.1 学生信息录入. 6 1.2.2 学生信息查询. 6 1.2.3 权限管理. 6 1.2.4 添加学生信息验证. 6 2.功能介绍. 7 2.1…

快速上手PyCharm指南

PyCharm简介 PyCharm是一种Python IDE(Integrated Development Environment,集成开发环境),带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试、语法高亮、项目管理、代码跳转、智能提示、自动…

idea如何建立web项目???

我们需要用到tomcat,没有下在着小伙伴,可以借鉴这篇博客: 如何正确下载tomcat???_明天更新的博客-CSDN博客 1.建立普通的Java项目。 2.简单编写index.jsp文件 3.添加tomcat 4.运行服务器 5.构建Servlet 最后…

嵌入式编译FFmpeg6.0版本并且组合x264

下载直通车:我用的是6.0版本的 1.准备编译: 2.进入ffmpeg源码目录,修改Makefile,添加编译选项: CFLAGS -fPIC 不加会报错 3.使用命令直接编译 ./configure --cross-prefix/home/xxx/bin/arm-linux-gnueabihf- --enable-cross-compile --targ…

CodeSite for .NET Crack

CodeSite for .NET Crack CodeSite for.NET与Visual Studio集成,通过实时查看器日志记录系统提供对代码执行的更深入了解,该系统有助于在本地或远程执行代码时快速查找问题。超越传统的断点调试,在应用程序继续运行时记录应用程序的执行&…

vue使用jsplumb 流程图

安装jsPlumb库&#xff1a;在Vue项目中使用npm或yarn安装jsPlumb库。 npm install jsplumb 创建一个Vue组件&#xff1a;创建一个Vue组件来容纳jsPlumb的功能和呈现。 <template><div style"margin: 20px"><div style"margin: 20px">&l…

Python学习笔记_基础篇(八)_正则表达式

1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分。正则表达式是用于处理字符串的强大工具&#xff0c;拥有自己独特的语法以及一个独立的处理引擎&#xff0c;效率上可能不如str自带的方法&#xff0c;但功能十分强大。得益于这一点&#xff0c;在提供了正则…

Spring系列篇 -- Bean的生命周期

目录 经典面试题目&#xff1a; 一&#xff0c;Bean的生命周期图 二&#xff0c;关于Bean的生命周期流程介绍&#xff1a; 三&#xff0c;Bean的单例与多例模式 总结&#xff1a; 前言&#xff1a;今天小编给大家带来的是关于Spring系列篇中的Bean的生命周期讲解。在了解B…