Spring Boot自动配置原理、实战、手撕自动装配源码
Spring Boot自动配置原理
相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 @SpringBootApplication,就可以成功运行。
前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解:
当然如果你想了解前面四个注解,可以查看我的文章:
@Target、@Retention、@Documented、@Inherited注解的超详细分析
@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。也就是说我们如果不用 @SpringBootApplication 这个复合注解,而是直接使用最下面这三个注解,也能启动一个 SpringBoot 应用。

前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。也就是说我们如果不用 @SpringBootApplication 这个复合注解,而是直接使用最下面这三个注解,也能启动一个 SpringBoot 应用,其中,Spring Boot的自动配置注解是@EnableAutoConfiguration。
其中,Spring Boot的自动配置最最核心的注解是@EnableAutoConfiguration,
@SpringBootConfiguration 注解
这个注解我们点进去就可以发现,它实际上就是一个 @Configuration 注解,这个注解大家应该很熟悉了,加上这个注解就是为了让当前类作为一个配置类交由 Spring 的 IOC 容器进行管理,因为前面我们说了,SpringBoot 本质上还是 Spring,所以原属于 Spring 的注解 @Configuration 在 SpringBoot 中也可以直接应用。

@ComponentScan 注解
@ComponentScan这个注解也很熟悉,用于定义 Spring 的扫描路径,等价于在 xml 文件中配置 context:component-scan,假如不配置扫描路径,那么 Spring 就会默认扫描当前类所在的包及其子包中的所有标注了 @Component,@Service,@Controller 等注解的类。

通过查看源码可以知道,@ComponentScan使用了@Repeatable(ComponentScans.class)注解,@ComponentScans是聚合多个ComponentScan注解的容器注解,它使ComponentScan注解可以在同一个类或方法上多次使用,@Repeatable注解的例子如下:

@EnableAutoConfiguration注解
这个注解才是实现自动装配的关键,点进去之后发现,它是一个由 @AutoConfigurationPackage 和 @Import 注解组成的复合注解。
@Import的类可以找到下面自动加载自动配置的映射。

写了一半用空补补
相关文章:
Spring Boot自动配置原理、实战、手撕自动装配源码
Spring Boot自动配置原理 相比较于传统的 Spring 应用,搭建一个 SpringBoot 应用,我们只需要引入一个注解 SpringBootApplication,就可以成功运行。 前面四个不用说,是定义一个注解所必须的,关键就在于后面三个注解&a…...
111111111111111
全局锁 就是对整个数据库进行加锁,加锁之后整个数据库就处于只读状态,后续的DML写语句,DDL语句,以及对更新事务的提交操作都会被阻塞,典型地使用场景就是做整个数据库的逻辑备份,对所有的表进行锁定&#x…...
React动态生成二维码和毫米(mm)单位转像素(px)单位
一、使用qrcode.react生成二维码,qrcode.react - npm 很简单,安装依赖包,然后引用就行了 npm install qrcode.react或者 yarn add qrcode.react直接上写好的代码 import React, {useEffect, useState} from react; import QRCode from qr…...
SpringMvc 常见面试题
1、SpringMvc概述 1.1、什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架,通过把Model,View,Controller分离,将web层进行职责解耦&am…...
jmeter接口自动化测试工具在企业开展实际的操作
在企业使用jmeter开展实际的接口自动化测试工具,建议按如下操作流程, 可以使整个接口测试过程更规范,更有效。 接口自动化的流程: 1、获取到接口文档:swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…...
第17章 反射机制
通过本章需要理解反射机制操作的意义以及Class类的作用,掌握反射对象实例化操作,并且可以深刻理解反射机制与工厂模式结合意义。掌握类结构反射操作的实现,并且可以通过反射实现类中构造方法、普通方法、成员属性的操作。掌握反射机制与简单J…...
如何在在线Excel文档中对数据进行统计
本次我们将用zOffice表格的公式与数据透视表分析样例(三个班级的学生成绩)。zOffice表格内置了大量和Excel相同的统计公式,可以进行各种常见的统计分析,如平均值、标准差、相关性等。同时,zOffice也有数据透视表功能&a…...
redis配置文件详解
一、配置文件位置 以配置文件启动 Redis 的配置文件位于 Redis 安装目录下,文件名为 redis.conf ( Windows名为redis.windows. conf) 例: # 这里要改成你自己的安装目录 cd ./redis-6.0.8 vim redis.conf redis对配置文件对大小写不敏感 二、配置文件 1、获取当前服务的…...
前端设计模式之【工厂模式】
文章目录 前言什么时候不用介绍工厂模式的流程例子优点缺陷后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:前端设计模式 🐱👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。…...
Python与ArcGIS系列(一)ArcGIS中使用Python
目录 0 简述1 arcgis中的python窗口2 开始编写代码 0 简述 按照惯例,作为本系列专栏的第一篇,先简单地介绍下本系列文章的内容:通过python语言创建arcgis环境脚本、将脚本以工具箱形式存放在arcgis中、通过脚本自动执行地理处理、数据修复、…...
LeetCode(2)移除元素【数组/字符串】【简单】
目录 1.题目2.答案3.提交结果截图 链接: 27. 移除元素 1.题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原…...
原型模式(创建型)
一、前言 原型模式是一种创建型设计模式,它允许在运行时通过克隆现有对象来创建新对象,而不是通过常规的构造函数创建。在原型模式中,一个原型对象可以克隆自身来创建新的对象,这个过程可以通过深度克隆或浅克隆来实现。简单说原型…...
Linux命令(118)之paste
linux命令之paste 1.paste介绍 linux命令paste命令是把每个文件以列对列的方式,一列列地加以合并 2.paste用法 paste [参数] filename... paste参数 参数说明-d使用指定的分隔符进行合并-s以行来指定文件 3.实例 3.1.使用冒号(:)合并文件 命令: …...
使用零拷贝技术实现消息转发功能
零拷贝技术介绍:史上最全零拷贝总结-CSDN博客 这是一个简单的基于epoll的Linux TCP代理程序,通过匿名管道和零拷贝技术的splice函数,将两个TCP端口相互连接,并转发数据。 #define _GNU_SOURCE 1 #include <sys/socket.h> …...
【编程语言发展史】SQL的发展历史
目录 目录 SQL概述 SQL发展历史 SQL特点 SQL基本语句 SQL是结构化查询语言(Structure Query Language)的缩写,它是使用关系模型的数据库应用语言,由IBM在70年代开发出来,作为IBM关系数据库原型System R的原型关系语言,实现了…...
2023NOIP A层联测28-小猫吃火龙果
给你一个长为 n n n 的序列,每个位置是 A , B , C A,B,C A,B,C 三个中的一个物品。 A A A 吃 B B B, B B B 吃 C C C, C C C 吃 A A A。 现在有 m m m 次操作,每次操作有两种: 区间修改:给出 l , r…...
C# Dictionary与List的用法区别与联系
C#是一门广泛应用于软件开发的编程语言,其中Dictionary和List是两种常用的集合类型。它们在存储和操作数据时有着不同的特点和用途。本文将详细探讨C# Dictionary和List的用法区别与联系,并通过代码示例进行对比,以帮助读者更好地选择适合自己…...
Git应用(1)
一、Git Git(读音为/gɪt/。中文 饭桶 )是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。 了解更多可到GIT官网:Git - Downloads GIT一般工作流程如下: 1.从远程仓库中克隆 Git 资源作为本地…...
【Java】Netty创建网络服务端客户端(TCP/UDP)
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Netty创建网络服务端客户端示例。 学其所用,用其所学。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更…...
Android 设计模式--单例模式
一,定义 单例模式就是确保某一个类只有一个实例,而且自行实例化,并向整个系统提供这个实例 二,使用场景 确保某个类只有一个对象的使用场景,避免产生多个对象消耗过多的资源,或者某种类型的对象只应该有…...
各种类的模型OpenAI格式
各类模型的OpenAI格式支持程度差异很大,下面逐一详细说明:一、有官方OpenAI格式标准的模型类型1. Chat / Text Completion ✅ 最完整已如前述,/v1/chat/completions 是最成熟的标准。2. Embedding ✅ 有标准POST /v1/embeddings// 请求 {&quo…...
德希科技在线多参数水质分析仪
一、产品概述与适用场景本设备为高度集成化全自动水质监测系统,可完成多参数水质数据实时采集、传输与智能分析。设备被广泛应用于自来水厂、供水管网、小区二次供水、游泳池、农村饮用水等场景,从取水、制水到供水实现全程水质监管,让水质状…...
Qwen3.5-2B开源大模型企业应用:客服知识图谱+图片工单识别落地案例
Qwen3.5-2B开源大模型企业应用:客服知识图谱图片工单识别落地案例 1. 轻量化多模态模型带来的企业AI变革 在当今企业服务领域,客服系统正面临前所未有的挑战。传统客服需要处理海量工单、识别各类图片凭证、理解复杂业务问题,而Qwen3.5-2B的…...
订阅号文章太干?AI 写作帮你提升可读性
几乎所有做内容的人,这两年都有同一个感受 文章越写越长,数据越加越多,阅读却越来越「干」。打开一篇订阅号文章,开头三段不是背景宏观,就是概念堆砌,核心观点要拉到中部才能看见。读者的耐心,早…...
PowerShell文件切割避坑指南:如何正确处理含中文的CSV大文件
PowerShell文件切割避坑指南:如何正确处理含中文的CSV大文件 在电商数据分析和用户行为研究的日常工作中,数据工程师经常需要处理动辄几十GB的CSV文件。这些文件往往包含大量中文内容,从商品名称到用户评论,编码问题成为数据处理的…...
忙得上天入地的导师派师姐助我毕设之救我狗命笔记(一)
开源模型探索实践-环境配置与参数修改一、环境配置按照 README 说明进行基础配置。在终端中依次执行以下命令:bashconda create -n aqatrack python3.8 conda activate aqatrack bash install.sh⚠️ 注意:Windows 系统执行最后一行会报错,此…...
JAVA OOP概念POJO、DTO、DAO、PO、BO、VO详解
在 Java 后端开发中,面对复杂的业务场景和团队协作,如果没有清晰的数据对象分层,代码很容易变成“意大利面”——数据库字段变更影响前端接口,敏感信息意外泄露,业务逻辑与数据访问混为一谈。 今天,我们结合…...
Android HAL升级避坑指南:从HIDL切换到Stable AIDL时,如何正确配置FCM和SEPolicy?
Android HAL升级实战:从HIDL迁移到Stable AIDL的完整避坑手册 当Android HAL架构从HIDL向Stable AIDL演进时,系统集成工程师常会在编译部署阶段遭遇各种"隐形陷阱"。本文将从实际项目经验出发,深度解析兼容性矩阵配置、SEPolicy权限…...
算法训练营第一天| 704. 二分查找
一、今日学习内容 今日任务:先把 704写熟练,要熟悉根据左闭右开,左闭右闭两种区间规则写出来的二分法。 题目建议: 了解一下数组基础,以及数组的内存空间地址,数组也没那么简单。 题目链接:https://leetcod…...
Linux学习日常8
chmod命令 chmod(change mode 的缩写)是 Linux/Unix 系统中用于修改文件或目录权限的核心命令。 在 Linux 中,每个文件和目录都有三类用户角色,并对应三种基本权限: 用户角色 u (user): 文件或目录的所有者。 g (group…...
