SpringBoot 自动配置原理(超级无敌详细)-1

SpringBoot 自动配置原理详解 在加载自动配置类的时候,并不是将spring.factories的配置全部加载进来,而是通过@Conditional等注解的判断进行动态加载@Conditional其实是spring底层注解,意思就是根据不同的条件,来进行自己不同的条件判断,如果满足指定的条件,那么配置类里边的配置才会生效。常用的Conditional注解:@ConditionalOnClass : classpath中存在该类时起效@ConditionalOnMissingClass : classpath中不存在该类时起效。 阅读详情

Spring Boot

  • @SpringBootApplication
    
    • 该注解标注在 某个类上, 说明该类为 SpringBoot的主配置类,SpringBoot 就应该运行这个类的main()方法来启动SpringBoot的应用。
    • 那**@SpringBootApplication** 是什么来的呢? 点开它,我们能够发现,其实它是一个组合注解 。又着两个重要的注解 @SpringBootConfiguration 和 @EnableAutoConfigurationimage-20200421112603611
    • 那接下来,我们就来分析这两个注解吧。

1.@SpringBootConfiguration


  • @SpringBootConfiguration
    
    • 该注解标注在 某个类上, 说明该类为 SpringBoot的 配置类,(注意 是配置类,没有主)image-20200421113043417
    • 在该注解下 还有一个 注解为 @Conguration ,即为配置类。 因为SpringBoot中没有 像Spring那样的大量的配置文件,所以为了让SpringBoot 知道哪些是配置类,所以就需要有@Configuration。当然了,@Configuration是Spring下的配置类注解,@SpringBootConfiguration是SpringBoot下的配置类注解,但二者的本质相同
    • 当我们把 @Configuration 在点进去,我们能发现它的本质是一个组件。所以 配置类也是容器中的一个组件
    • image-20200421113659190
    • 加下来我们再看@SpringBootApplication的第二个注解**@EnableAutoConfiguration**

2.@EnableAutoConfiguration


@EnableAutoConfiguration 就是 为SpringBoot实现自动配置的核心注解。它的意思就是开启自动配置功能。也就是说我们之前需要配置的东西,现在都不需要配置了 而在 @EnableAutoConfiguration 的内部又有两个非常重要的注解,分别为 @AutoConfigurationPackage 和 @Import(AutoConfigurationImportSelector.class) 。 image-20200421114404004

1.@AutoConfigurationPackage 自动配置包

  • @AutoConfigurationPackag
    
    • 我们进入 @AutoConfigurationPackag 的内部,我们发现这个该注解是由一个 @Import注解来完成的image-20200421114907205

    • @Import(AutoConfigurationPackages.Registrar.class) 注解是Spring底层的一个注解,它的作用就是给容器中导入一个组件,也就是导入 AutoConfigurationPackages.Registrar.class 的组件 ,那我们也进入 Registrar 类的内部image-20200421115218113它是 AutoConfigurationPackages 下的一个静态内部类**。 这个类(Registrar 类)的作用是给容器中导入组件**

    • 我们主要看后面的 new PackageImport(metadata).getPackageName() ,它是导入一个 metadata(注解源信息)到PackageImport中, 然后获取这个包的包名 。那重点是这个 实例对象获取的包名是什么呢?

    • 我们对这个 new PackageImport(metadata).getPackageName() 右键,找到该功能 new PackageImport(metadata).getPackageName() image-20200421115909976

      对它的值进行计算一下,得到返回得结果是image-20200421120039301

    • 我们发现这个结果就是 与我们 SpringBoot主配置类所在的包的包名

    • 总结: @AutoConfigurationPackag 的作用就是将SpringBoot 主配置类所在的包 及其 下面的所有子包里面的所有组件 扫描到 Spring 容器中

2.@Import(AutoConfigurationImportSelector.class)

  • @Import(AutoConfigurationImportSelector.class)
    
    • 这一个注解的作用就是给容器中导入组件,这个注解需要导入的组件就是 AutoConfigurationImportSelector,也就是自动配置导入选择器,它可以帮我们选择需要导入的组件

    • 进入AutoConfigurationImportSelector 查看源码,我们发现这与SpringBoot1.x版本有着一些区别,在SpringBoot2.x 中有一个静态内部类 image-20200421100632900

      大致的意思是 自动配置组, 能够帮我们完成一系列自动配置的操作。我们的重点回到 该 静态内部类下的process()方法 image-20200421101113080

      调用了getAutoConfigurationEntry()方法,该方法的作用就是告诉 Spring容器需要导入什么组件,并以 String[] 的形式返回全类名 image-20200421101636814

      从configurations(标蓝的一行), 我们可以看出 SpringBoot 已经帮我们自动导入了 124 个组件,从下图可以看出都是以全类名的形式返回。而且这些组件的名字都是以 ...AutoConfiguration 的形式命名,也就是什么自动配置类

      image-20200421101857769

      有了这些自动配置类,我们就免去了手动配置注入功能组件的操作了

    • 那为什么他能做到自动配置呢? 其实这也是有依据的。configurations 这个变量是由 getCandidateConfigurations() 方法得到的, 也就是获取候选的配置。

    • image-20200421103056880这里调用了 SpringFactoriesLoader.loadFactoryNames(EnableAutoConfiguration.class,this.beanClassLoader) , 传入了两个参数image-20200421103335022image-20200421103355729

    • 那我们就来看下 loadFactoryNames() 作用image-20200421104057373在这里又调用了loadSpringFactories(类加载器) 并将类加载器作为参数。

    • image-20200421105432373

    • 首先是在 133 行,从类加载器中加载一个资源,资源路径为FACTORIES_RESOURCE_LOCATION(即为image-20200421104844686)将获取到的一个资源赋值给 Enumeration类型的变量urls, 如果该变量中有下一个元素,说明这里面又包含资源,那就将这个资源加载成 properties 配置文件,并转换成为键值对即 Map类型的数据 进行返回

    • 那我们也来看看 META-INF/spring.factories资源路径下的内容长什么样image-20200421110124952

    • 总结: SpringBoot 在启动的时候就从类路径下的 META-INF/spring.factories 中获取EnableAutoConfiguration指定的值,并将这些值加载到自动配置类导入到容器中,自动配置类 就生效,帮助我们进行自动配置功能。 而这些自动配置类 全都在 spring-boot-autoconfigure-2.2.6.RELEASE.jar 该jar包之下

    • 那我们现在就回到这个 META-INF/spring.factories 文件,我们找一个自动配置类作为示例,就例如最后的

      org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration,\
      

      我们点进去这个自动配置类看看为了配置了什么功能(太多了,随便列举几个在SpringMVC常见的)

      image-20200421110937069

    • 内部资源视图解析器(能够帮我们拼接视图的前后缀)image-20200421111127403

Python头歌实验题目(2024版) 武汉理工大学头歌平台实验题目 阅读详情

相关推荐

告别Keil手动分区!用CubeMX+VS Code一键生成带Bootloader的STM32 OTA工程

本文详细介绍了如何利用STM32CubeMX和VS Code实现STM32 OTA工程的自动化构建,告别传统Keil手动分区的繁琐流程。通过图形化配置Flash分区、自动生成链接脚本以及实现Bootloader跳转逻辑,开发者可以高效完成远程升级功能开发,显著提升嵌入式开发效率。

weixin_33720956的博客 389

SpringBoot的自动配置

英文是它是指基于你引入的依赖Jar包,对SpringBoot应用进行自动配置它为SpringBoot框架的"开箱即用"提供了基础支撑英文广的“配置类”:被注解@Component直接或间接修饰的某个类,即我们常说的Spring组件,其中包括了@Configuration类。狭义的“配置类”:特指被注解@Configuration所修饰的某个类,又称为@Configuration类。SpringFactories机制Java SPI机制的延伸和扩展。

qq_46130027的博客 4773

相机SDK开发C++篇-常用开发函数封装讲解(迈德威视相机)

/ 软触发失败,返回false } return true;= (nRet = CameraSetSysOption("NumBuffers", QString("%1").arg(getImageBufferNodeNum()).toLocal8Bit().data()))) { setLastErrorMsg("相机#%1设置缓存区数量错误,错误码:%2").arg(getCameraIndex()).arg(nRet);

GodJhin的博客 1542

Springboot自动配置

​Springboot的自动配置原理

yhang0802的博客 8276

加速度计解算姿态角

姿态角(欧拉角) 欧拉角主要用于描述刚体在固定三维参考坐标系下由于绕三轴任意旋转而形成的姿态角,具体描述参看欧拉角说明 图中xyz为固定参考系坐标,XYZ为刚体自有坐标系 (假定右手定则,即大拇指指向某一轴正方向,握拳是其余手指的转动方向为姿态角变化的正方向),则定义 绕固定坐标系的z轴旋转:航向角yaw, 转动 y 角度 绕固定坐标系的y轴旋转:俯仰角pitch,转动p 角度 绕固定坐标系的x轴旋转:横滚角roll, 转动r 角度 可以看出欧拉角或者姿态角是相对各个轴的角度偏移,再假定旋转的顺规为Z

卢平光的博客 1万+

Linux下用SquareLine Studio开发LVGL界面:从安装到实战的完整避坑指南

本文提供了一份在Linux系统下使用SquareLine Studio开发LVGL图形界面的完整实战指南。内容涵盖从SDL库安装、SquareLine Studio环境配置、界面可视化设计,到工程导出、源码编译及常见错误排查的全流程。重点解析了如何将设计界面无缝集成到Linux开发流程中,并针对嵌入式设备移植提供了关键步骤,旨在帮助开发者高效避坑,快速上手LVGL界面开发。

egg99的博客 905

Spring Boot自动配置

Spring boot 特性:1、能够快速创建基于Spring的应用程序; 2、能够直接使用java main方法启动内嵌的Tomcat,Jetty服务器运行Spring boot程序,不需要部署war包文件; 3、提供约定的starter POM来简化Maven配置,让Maven的配置变得简单; 4、根据项目的Maven依赖配置,Spring boot自动配置Spring、Spring mvc等; 5、提供了程序的健康检查等功能; 6、基本可以完全不使用XML配置文件,采用注解配置。

quanzhan_King的博客 2202

深度解析:C# Modbus TCP协议解析与异常处理(工控上位机必备)

协议解析要精准:掌握MBAP头和PDU的结构,尤其是常用功能码的请求/响应格式,避免因字节处理错误导致通信失败;异常处理要全面:覆盖通信层、协议层、数据层的所有异常类型,针对工业场景制定重试、重连、滤波等策略;资源管理要规范:使用释放资源,采用连接池复用连接,避免端口泄露;工业场景要适配:结合工控现场的特点(网络波动、电磁干扰、设备忙),优化通信效率和数据处理逻辑。通过以上解析和策略,可确保C#上位机与工业设备的Modbus TCP通信具备高稳定性、高可靠性、高容错性,满足工控领域的严苛要求。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 997

SpringBoot自动配置原理

Spring Boot通过@EnableAutoConfiguration注解开启自动配置,对jar包下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。通俗的来讲,我们之前在写ssm项目时候,配置了大量坐标和配置内容,搭环境的过程在项目开发中占据了大量时间,Spring Boot的最大的特点就是简化了各种xml配置内容,所以springboot的自动配置。...

m0_46420244的博客 2万+

使用MATLAB求解二维顶盖驱动流问题的详细代码和说明

本文介绍了使用MATLAB求解二维顶盖驱动流问题的涡量-流函数方法。代码采用129×129网格,雷诺数Re=1000,通过迭代求解Navier-Stokes方程,包含流函数方程和涡量输运方程的离散求解。程序实现了边界条件处理、收敛性检查,并提供丰富后处理功能:流线图、涡量分布图、中心线速度曲线、矢量图和三维涡量可视化。计算结果可与Ghia等(1982)的经典数据进行验证。该代码完整展示了CFD问题的数值求解流程,包括参数设置、主循环计算和多种结果呈现方式,适用于流体力学教学和科研验证。

AI的内部世界的博客 225

Android Framework SurfaceFlinger面试题及参考答案

请简述 SurfaceFlinger 在 Android 系统中的作用。 SurfaceFlinger 是 Android 系统中一个非常关键的服务。它主要负责将多个应用程序的 Surface 合成到一个屏幕显示内容中。 从应用程序的角度来看,每个应用都有自己的 UI 界面,这些 UI 界面实际上是由一系列的图层(Surface)构成。例如,一个应用可能有背景图层、按钮图层、文本图层等。应用通过向 SurfaceFlinger 提供这些 Surface 来请求显示。 SurfaceFl

大模型大数据攻城狮的专栏 1185

springboot的自动配置

1.通过Condition注解----固定文件的自动配置实现过程:首先定义一个类其次:定义一个类,实现Condition接口,在重写其中的matches方法,判断相关的文件是否存在最后:通过创建配置类,通过Condition注解 @Conditional(value= 实现类类名.class)//@Conditional中的 实现类类名.class的matches方法,返回true则将该类通过@bean注解注入到spring容器中,返回false则不注入到spring容器中,

2401_83287540的博客 2543

【产品经理修炼之道】- 优惠券系统从入门到精通(二)

在电商平台中,优惠券的使用场景与频次都很高。那么如何做好一个优惠券系统呢?本文总结了相关流程和设计思路,希望对你有所帮助。上一篇与大家分享了架构中的前端应用、生命周期、优惠券管理中OpenAPI 、基础系统,今天继续与大家分享架构图中优惠券模板部分。

xiaoli8748的专栏 1291

简单详细的SpringBoot自动配置原理解析

SpringBoot启动会根据条件加载配置

码农飞哥 7057

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

SpringBoot 自动配置原理(超级无敌详细)-2

SpringBoot 自动配置原理(超级无敌详细)-1 2.自动配置的实现 刚刚我们整体的过了一下主配置文件是如何实现的,但我们还没深入的研究如何实现自动装配功能。我们回到这个文件下,找一个具体的自动配置类进行分析。 jar:file:/apache-maven-3.6.3-repository/org/springframework/boot/spring-boot-autoconfigure/...

Dim_Jerry的博客 552

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

SpringBoot自动配置原理和流程

在主启动类上添加了SpringBootApplication注解,这个注解组合了EnableAutoConfiguration注解。

qq_52464274的博客 4811

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

深入Springboot启动流程+自动配置原理

深入Springboot启动流程+自动配置原理🍅写在前面🍅相关常见面试题Springboot启动入口@SpringBootConfiguration解读@ComponentScan解读@EnableAutoConfiguration解读(重点)@AutoConfigurationPackage解读@Import({AutoConfigurationImportSelector.class})解读(重点) 🍅写在前面🍅 自从SpringBoot问世以来,开发界可以说是乱了套。 我还记得我朋友几年前去参加

易柏州的博客 1万+

springboot的自动配置原理/步骤

1、SpringBoot启动的时候加载主配置类(@SpringBootApplication),开启了自动配置功能 @EnableAutoConfiguration。  2、@EnableAutoConfiguration 作用:          利用AutoConfigurationImportSelector给容器中导入一些组件;可以查看selectImports()方法的内容;  ...

weixin_38364973的博客 5万+

springboot 自动配置原理

springboot 自动配置原理、EnableAutoConfiguration、Configuration、ComponentScan、DeferredImportSelector、ImportSelector

杨宇昌的博客 1万+

SpringBoot之AutoConfiguration自动配置原理

SpringBoot自动配置原理1. 原理2. 细节 1. 原理 我们在写启动类的时候会用到SpringBootApplication注解,SpringBoot启动的时候加载主配置类,这个注解里面开启了自动配置功能 @EnableAutoConfiguration @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoCo

Yolyn‘s blog 8907

SpringBoot自动配置原理详解

那如果面试官问,说说你对 SpringBoot 自动配置的理解,我们该怎么回答?

m0_51431003的博客 3593

一文搞懂 springboot 自动配置原理

springboot 自动配置原理,手写 starter 和 自动配置类

zwl2220943286的博客 2186

springBoot自动配置原理

一、自动装配是什么? 自动装配就是spring容器启动后,一些自动配置类就自动装配的IOC容器中,不需要我们手动去注入。 二、自动配置原理 SPI:是server provider interface 的简写,字面意思是服务发现接口,我理解就是第三方拓展API,他是java提出的,即开箱即用的思想。在spring的生态中已经运用得非常多,比如springMVC中官方推荐的去web.xml的方式,用一个onStart的方法就将dispatcherServlet到IOC的容器中,这也是利用了tomcat的SPI

m0_51167384的博客 1万+

springboot自动配置原理

Spring Boot 自动配置是 Spring Boot 的核心特性之一。通过自动配置,Spring Boot 能够根据当前的类路径依赖、配置文件和运行环境,自动为应用程序注册所需的 Spring Bean,从而免去繁琐的 XML 或 Java 配置。自动配置大大简化了开发过程,使开发者可以专注于业务逻辑,而无需显式定义所有的配置细节。下面以一个自定义自动配置为例,展示如何实现自动配置。MyService类自动配置类。

Flying_Fish_roe的博客 2493

SpringBoot自动配置原理解析

本文将以广角视觉来剖析SpringBoot自动配置的原理,涉及部分Spring、SpringBoot源码

F & F的博客 3481
上一篇: Java中Array和Arrays的区别
下一篇: SpringBoot 自动配置原理(超级无敌详细)-2
Dim_Jerry
博客等级 码龄8年 14粉丝 50原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值