二说springboot3的自动配置机制

news2024/10/6 1:47:08

大家好,这里是教授.F

目录

@SpringBootApplication:

   @EableAutoConfiguration:


上一篇文章粗略的讲了自动配置机制,二说系列将从源码的角度进行讲解。

@SpringBootApplication:

        首先我们还是得从@SpringBootApplication开始讲起。在@SpringBootApplication是由@Configuration、@ComponentScan和@EableAutoConfiguration组成的。@ComponentScan完成对被@Conponent注解的bean,默认情况下,扫描该类所在包下的所有类。@Configuration允许上下文注册额外的 bean 或导入其他配置类。   @EableAutoConfiguration则负责启动SpringBoot的自动配置。请看下图。

        

   @EableAutoConfiguration:

        下面我们从源码来对   @EableAutoConfiguration进行解剖。

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.context.annotation.Import;
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import({AutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
    String ENABLED_OVERRIDE_PROPERTY =
    "spring.boot.enableautoconfiguration";
    Class<?>[] exclude() default {};
    String[] excludeName() default {};
}

@EableAutoConfiguration启动自动配置本质上就是能控制bean。

看看源码:

@Import({AutoConfigurationImportSelector.class})

@EableAutoConfiguration通过注解@Import导入AutoConfigurationImportSelector.class。( @Import 注解可以导入配置类或者 Bean 到当前类中)。AutoConfigurationImportSelector类中有getCandidateConfigurations。getCandidateConfigurations能将所有自动配置类的信息封装成List返回。这些信息会被Spring当作bean来管理。

protected List<String> getCandidateConfigurations(AnnotationMetadata
    metadata, AnnotationAttributes attributes) {
    List<String> configurations =
    SpringFactoriesLoader.loadFactoryNames(getSpringFactoriesLoaderFactoryClass()
,getBeanClassLoader());
    Assert.notEmpty(configurations, "No auto configuration classes found
    in META-INF/spring.factories. If you "
    + "are using a custom packaging, make sure that file is
    correct.");
    return configurations;
}

有了这些,现在只需要@Conditional 注解。 @ConditionalOnClass (指定的类必须存在于类路径 下)。将类存在于指定的地方,这样自动将配置就完成了

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

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

相关文章

大数据之HDFS磁盘扩容(linux磁盘扩容)

之所以扩容,是因为当前大数据平台已经接入了不同来源的数据,当执行mapreduce任务时,会发生磁盘爆满,导致hdfs爆红 具体扩容方案如下: 1、查看云磁盘分区情况 fdisk -l . 可以从图看出&#xff1a; /dev/vda 数据盘磁盘容量为21.5GB&#xff0c;包含/dev/vda1分区 /dev/vdb 数…

GD32F4XX的ISP方式下载程序时的串口选择

官方资料 详细信息可参考GD32F4xx的用户手册&#xff0c;第 1.4 章节 引导配置 。 版本是 &#xff1a;GD32F4xx_User_Manual_Rev3.0_CN 资料链接: https://www.gd32mcu.com/cn/download/6?kwGD32F4

Vue3【八】ref创建基本类型的响应式数据

ref创建基本类型的响应式数据 在setup中直接声明变量不是实时变化的响应式数据 要想使基本类型数据变成响应式数据&#xff0c;需要用到ref()函数 案例截图 案例目录 案例代码 Person <template><div class"person"><h1>我是Person组件</h1&g…

数据结构~~排序

目录 一、排序的概念 二、插入排序 直接插入排序 希尔排序 三、选择排序 选择排序 堆排序 四、交换排序 冒泡排序 快速排序 递归实现 非递归实现 五、归并排序 递归 非递归 六、非比较排序&#xff08;计数排序&#xff09; 七、其他排序 基数排序 桶排序 八…

使用JMeter软件压测接口配置说明

1、下载完该软件https://blog.csdn.net/wust_lh/article/details/86095924 2.点击bin文件中jmeter.bat脚本https://blog.csdn.net/wust_lh/article/details/86095924 3.官网地址https://jmeter.apache.org/download_jmeter.cgi 通过 【Options】->【Choose Language】变更为…

uniapp uni-popup内容被隐藏问题

今天开发新需求的时候发现uni-popup 过一会就被隐藏掉只留下遮罩(css被更改了)&#xff0c;作者进行了如下调试。 1.讲uni-popup放入其他节点内 失败&#xff01; 2.在生成dom后在打开 失败&#xff01; 3.uni-popup将该节点在包裹一层 然后将统计设置样式&#xff0c;v-if v-s…

如何格式化SQL语句(以MySQL和SQLynx为例)

目录 1 SQLynx 格式化MySQL的SQL 语句功能介绍 1.1 主要特点 1.2 使用步骤 1.3 操作示例 2 结论 SQLynx 是一款功能强大的 SQL 集成开发环境&#xff08;IDE&#xff09;&#xff0c;它提供了多种工具和功能来提高用户的生产力和代码质量。其中&#xff0c;SQL 语句的格式…

上心师傅的思路分享(二)

Druid monitor 与Springboot常见报错界面渗透小技巧 目录 前言 1.Druid monitor介绍 2.Druid未授权(1rank) 3.druid弱口令 4.Druid进一步利用 4.1 URL监控 4.2 Session监控 利用思路 EditThisCookie(小饼干插件) 5.SpringBoot Actuator未授权访问漏洞 5.1 简介 5…

实验11 OSPF协议配置

实验11 OSPF协议配置 一、OSPF单区域配置&#xff08;一&#xff09;原理描述&#xff08;二&#xff09;实验目的&#xff08;三&#xff09;实验内容&#xff08;四&#xff09;实验配置&#xff08;五&#xff09;实验步骤 二、OSPF多区域配置&#xff08;一&#xff09;原理…

外贸软件解决食品行业管理难点降本增效

食品进出口贸易&#xff0c;指的是非自己国家的品牌或着生产的食品&#xff0c;通俗讲就是从别的国家和地区进行采购&#xff0c;甚至是在别的国家和地区生产&#xff0c;在国内再进行分包装的。随着全球化贸易的发展&#xff0c;食品行业国际化贸易的渠道和种类&#xff0c;都…

Java | Leetcode Java题解之第129题求根节点到叶节点数字之和

题目&#xff1a; 题解&#xff1a; class Solution {public int sumNumbers(TreeNode root) {if (root null) {return 0;}int sum 0;Queue<TreeNode> nodeQueue new LinkedList<TreeNode>();Queue<Integer> numQueue new LinkedList<Integer>();…

OS摘录1

目录 第二章第四章什么是物理地址、线性地址、虚拟地址&#xff1f;为什么要使用保护模式&#xff1f;个人理解&#xff1a;中断表无法处理&#xff1a; 第二章 即使内存条大小没有超过地址总线的范围&#xff0c;也不会全都能被访问到&#xff0c;毕竟要预留一些地址用来访问…

2024年中国质量协会六西格玛考试报名即将启动!

亲爱的考生们&#xff0c;2024年中国质量协会六西格玛考试的报名时间现已正式公布&#xff01;为方便广大考生&#xff0c;本次报名将全程采用网络方式进行&#xff0c;确保每位考生都能轻松、快捷地完成报名流程。 一、报名信息概览 报名网站&#xff1a;中国质量协会质量专…

慎投!Hindawi这本SCI还在检,这里已被踢!新增14本Scopus期刊被剔除!

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 3天内初审录用&#xff0c;随即出版&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0…

Ci522:低成本NFC刷卡芯片数据手册(南京中科微)

Ci522基本描述&#xff1a; 南京中科微这颗Ci522芯片是一个高度集成的&#xff0c;工作在13.56MHz的非接触式读写器芯片&#xff0c;阅读器支持ISO/IEC 14443A。其特有的ACD功能&#xff08;超低功耗自动载波侦测&#xff09;&#xff0c;可以将智能门锁的功耗降到超低。为此在…

小程序开发平台版源码系统——社区论坛小程序功能 带完整的安装代码包以及搭建教程

系统概述 这款社区论坛小程序源码系统是一款功能强大、易于使用的开发平台版源码系统。它采用先进的技术架构&#xff0c;结合了丰富的功能模块&#xff0c;能够满足不同用户的需求。该系统具有高度的可扩展性和灵活性&#xff0c;能够根据用户的需求进行定制化开发&#xff0…

三.一布局和布局切换的实践与探索

在前端开发中&#xff0c;灵活的布局切换是一项非常实用的功能。今天&#xff0c;我想和大家分享一下如何在主组件中通过更换 Layout 目录下的组件来实现布局切换。 首先&#xff0c;我们有一个主组件 index.vue&#xff0c;它承担着整个页面的主要逻辑和展示。 而在 Layout …

jupyter notebook默认打开路径设置

前言 对更改jupyter notebook的默认打开路径设置进行记录。 1. 生成修改配置文件 用cmd打开命令提示符窗口&#xff0c;输入如下命令&#xff1a; jupyter notebook --generate-config在路径“C:\Users\用户名.jupyter”找到文件jupyter_notebook_config.py&#xff0c;打开…

k8s和deepflow部署与测试

Ubuntu-22-LTS部署k8s和deepflow 环境详情&#xff1a; Static hostname: k8smaster.example.net Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 605a74a509724a88940bbbb69cde77f2 Virtualization: vmware Operating System: U…

电机控制系列模块解析(27)—— 启动前诊断

驱动器启动前诊断 在现代工业自动化和智能控制领域&#xff0c;电机驱动器作为核心部件&#xff0c;承担着将电能高效转化为机械能的重要任务。为了确保电机系统的稳定、安全和高效运行&#xff0c;电机驱动器在启动之前会执行一系列全面的状态检测&#xff0c;以预防潜在故障…