SpringBoot原理-自动配置-原理分析-源码跟踪

自动配置原理

  • SpringBootApplication

    • 该注解标识在SpringBoot项目的启动类上,是SpringBoot中最为重要的注解,该注解由三个部分组成。
      • @SpringBootConfiguration:该注解与@Configuration注解作用一样,用来声明当前类为一个配置类
      • @ComponentScan:组件扫描,默认扫描当前启动类所在包及其子包
      • @EnableAutoConfiguration:SpringBoot实现自动化配置的核心注解
        • 该注解是个复合注解,其中封住了一个@Import注解,指定注入到SpringIOC容器中的ImportSelector接口的实现类。
        • 具体参照文章:SpringBoot原理-自动配置-方案_熵240的博客-CSDN博客 
        • 该实现类中实现了该接口(ImportSelector)中selectImports方法,该方法的返回值是我们要导入到IOC容器中的全类名的集合,
        • 在该方法中加载了两个文件 META-INF/springorg.springframework.boot.autoconfigure.AutoConfiguration.imports
          • META-INF/spring目录:这个目录下的文件是Spring Boot自动配置的核心配置文件。在这个目录下,可以定义多个配置文件,每个配置文件对应一个自动配置类。这些配置文件使用了Spring的SPI(Service Provider Interface)机制,通过SpringFactoriesLoader加载并实例化自动配置类。

          • org.springframework.boot.autoconfigure.AutoConfiguration.imports文件:这个文件定义了需要自动导入的其他自动配置类。在自动配置类中,可以使用@Import注解来导入其他自动配置类。而在AutoConfiguration.imports文件中,可以列出需要自动导入的自动配置类的全限定类名,这样在启动时,Spring Boot会自动将这些自动配置类导入到容器中

        • 在imports文件中会定义非常多的自动配置类,配置类当中也会定义很多bean对象,我们可以通过注解来设置将bean对象装配到IOC容器的条件。具体参见文章:SpringBoot原理-自动配置-原理分析-@Conditional_熵240的博客-CSDN博客        

小结 

  • 自动装配简单讲就是将第三方的bean以及配置类装载到IOC容器中,开发人员就不再需要写bean的配置了,自动装配的实现只需要在启动类上加入@SpringBootApplication注解就可以了,而@SpringBootApplication注解是一个复合注解,其中自动装配的实现是通过@EnableAutoConfiguration注解实现的,自动装配的实现主要依靠三个关键的技术。
    • 第一,引入Starter,启动依赖组件的时候,该组件中必须含有@Configuration配置类,在这个配置类中,我们需要通过@Bean注解去声明要装配到IOC容器中的Bean对象
    • 第二,上述配置类是放在第三方的jar包里面,然后通过SpringBoot中约定优于配置的理念去把配置类的全路径放在META-INF/spring.factories文件中,由此SpringBoot就可以知道第三方jar包里面配置类的位置,当Spring Boot启动时,会通过SpringFactoriesLoader加载META-INF/spring.factories文件中定义的自动配置类。然后根据条件注解的判断,决定是否需要进行自动配置。
    • 第三,SpringBoot拿到所有第三方jar包里面声明的配置类之后,在通过Spring提供的ImportSelector接口来实现对于这些配置类的动态加载,从而完成自动装配。该接口的实现类由@EnableAutoConfiguration注解中包含的@Import注解来指定。通过实现该中String[] selectImports()方法,该方法的返回值为需要装入Spring IOC容器中类。

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

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

相关文章

VM安装RedHat7虚机ens33网络不显示IP问题解决

1、今天在VMware中安装RedHat7.4虚拟机,网络连接使用的是 NAT 连接方式,刚开始安装成功之后输入ifconfig 还能看到ens33自动分配的IP地址,但是当虚机关机重启后,再查看IP发现原来的ens33网络已经没有了,只变成了这两个…

【大数据】Kafka 入门指南

Kafka 入门指南 1.Kafka 简介2.Kafka 架构3.分区与副本4.偏移量5.消费者组6.总结 1.Kafka 简介 Apache Kafka 是一种高吞吐、分布式的流处理平台,由 LinkedIn 开发并于 2011 年开源。它具有 高伸缩性、高可靠性 和 低延迟 等特点,因此在大型数据处理场景…

Python类的概念

类 类的技术名词解释 ● 类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。 ● 类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用…

CSP 201312-1 出现次数最多的数

答题 用两个map&#xff0c;一个map记录每个数出现的次数并降序排序&#xff0c;另一个map将次数作为键&#xff0c;数本身作为值&#xff0c;降序排序&#xff0c;搞定 #include<iostream> #include<map> using namespace std; int main(){map<int,int,great…

git 合并分支某次(commit)提交

需求&#xff1a;将develop分支某次提交合并到master上面&#xff0c;其他修改不同步&#xff1b; //切换到master分支 git checkout master //查看develop分支提交记录&#xff0c;获取对应记录哈希值&#xff1b; git log develop // 按上下按钮可以上下查询对应记录&#xf…

获取该虚拟机的所有权失败,主机上的某个应用程序正在使用该虚拟机

点击“openstack-controller”虚机 打开出现如下错误&#xff0c;点击“获取所有权” 点击“取消” 这时候不要删除虚拟机&#xff0c;这种错误一般是由于虚拟机没有正常关闭引起的。 找到openstack-controller的虚拟磁盘文件及配置文件存放的位置&#xff0c;删除openstack-…

SpringBoot学习笔记(项目创建,yaml,多环境开发,整合mybatis SMM)

一、SpringBoot入门 1.1 SpringBoot概述 SpringBoot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化Spring应用的初始搭建以及开发过程。 Spring程序缺点&#xff1a;配置繁琐&#xff0c;依赖设置繁琐。SpringBoot程序优点&#xff1a;自动装配&#xff0c…

linux安装postgresql13

linux安装postgresql13 1. 安装postgresql131.1 安装1.2. 数据库初始化1.3.配置远程访问1.3.1 修改配置文件1.3.2 重启服务1.3.3 测试连接 1.4 卸载 2. 安装Postgis2.1 安装2.2 为数据库添加postgis2.2.1 查看文件2.2.2 为数据库添加postgis2.2.3 创建操作系统用户 3. 安装pgAd…

文件上传漏洞案例

目录 1.案例一 1&#xff09;案例源码 2&#xff09;创建web.php文件 3&#xff09;使用抓包软件 2.案例二 1&#xff09;案例代码 2&#xff09; 案例分析 3&#xff09;copy命令生成图片马 4&#xff09;上传图片马到服务器 5&#xff09;解析 文件图片 3.案例三 …

阿里云2核4G服务器5M带宽5年费用价格明细表

阿里云2核4G服务器5M带宽可以选择轻量应用服务器或云服务器ECS&#xff0c;轻量2核4G4M带宽服务器297元一年&#xff0c;2核4G云服务器ECS可以选择计算型c7、c6或通用算力型u1实例等&#xff0c;买5年可以享受3折优惠&#xff0c;阿腾云分享阿里云服务器2核4G5M带宽五年费用表&…

分布式AKF拆分原则

目录 1 前言2 什么是AKF3 如何基于 AKF X 轴扩展系统&#xff1f;4 如何基于 AKF Y 轴扩展系统&#xff1f;5 如何基于 AKF Z 轴扩展系统&#xff1f;6 小结 1 前言 当我们需要分布式系统提供更强的性能时&#xff0c;该怎样扩展系统呢&#xff1f;什么时候该加机器&#xff1…

驱动开发--day2(内核不同模块的相互访问、字符设备驱动、led控制实验代码及现象)

实现三盏灯的控制&#xff0c;编写应用程序测试 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define LED1_MODER 0X50006000 #define LED1_ODR 0X50006014 #define LED1_RCC 0X50000A28#define LED2_MODER 0X50007000 #define LED2_ODR 0X50007014#endif mychrdev.c #inc…

YOLOv5算法改进(16)— 增加小目标检测层

前言&#xff1a;Hello大家好&#xff0c;我是小哥谈。小目标检测层是指在目标检测任务中用于检测小尺寸目标的特定网络层。由于小目标具有较小的尺寸和低分辨率&#xff0c;它们往往更加难以检测和定位。YOLOv5算法的检测速度与精度较为平衡&#xff0c;但是对于小目标的检测效…

电容笔值不值得买?开学季比较好用的电容笔

眼看着新学期即将到来&#xff0c;到底应该选择什么样的电容笔&#xff1f;一款原装的苹果Pencil&#xff0c;就卖到了将近一千块&#xff0c;这对于很多人来说&#xff0c;都是一个十分昂贵的价格。事实上&#xff0c;由于平替电容笔的价格非常便宜&#xff0c;只要一二百元就…

Shell命令管理进程

Shell命令管理进程 列出进程 ps命令 top命令 管理后台进程 启动后台进程 查看后台进程 jobs和ps的区别 停止进程 Linux除了是一种多用户操作系统之外&#xff0c;还是一种多任务系统。多任务意味着可以同时运行多个程序。Linux 提供了相关的工具来列出运行中的进程,监视…

库的相关操作

目录 一、创建数据库 1&#xff0c;创建数据库规则 2、创建案例 二、字符集和校验规则 1、查看系统默认字符集以及校验规则 2、查看数据库支持的字符集以及校验规则 3、校验规则对数据库的影响 三、操纵数据库 1、查看数据库和目前所在数据库 2、显示创建语句 3、修改数据库 4、…

windows环境下node安装教程(超详细)

安装node.js 1、下载node: 下载地址&#xff1a;下载 | Node.js 中文网 node.js的zip包安装时是直接解压缩后就可以了, node.js的msi包是傻瓜式一路next就可以了 选择一中方式就可以 2、解压后的目录,或者mis安装后的目录如下: 3、安装完后&#xff0c;可以在命令行中输入…

c高级day4(9.11)shell脚本(case ....in语句,循环语句,select ...in和case...In结合,辅助控制关键字,函数)

1.实现一个对数组就和的函数&#xff0c;数组通过实参传递给函数 2.写一个函数&#xff0c;输出当前用户的uid和gid&#xff0c;并使用变量接收结果 #!/bin/bash read -a arr sum0 function add() { …

【易盾点选】

拿官网的点选做个例子吧&#xff0c;比较省事&#xff0c;水一篇~ ​ 官网的接口目前都改成V3了&#xff0c;多了个dt参数&#xff0c;以及加密的一个函数也变动了下 点选坐标在这&#xff0c;加密函数未变&#xff0c;用逗号拼接 整个加密里的函数变了&#xff0c;直接重新…

RedisJava基础代码实现

Jedis快速入门 <!--jedis--> <dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version> </dependency> <!--单元测试--> <dependency><groupId>org.ju…