SpringBoot自动装配原理
SpringBoot自动装配原理
在介绍SpringBoot自动装配原理之前我们需要先看一个注解 --> SpringBootApplication
@SpringBootApplication
public class BackendApp {public static void main(String[] args) {SpringApplication.run(BackendApp.class, args);}
}
我们都知道SpringBootApplication是用来声明引导类的 , 除此之外他还应用于自动装配
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {@Filter(type = FilterType.CUSTOM,classes = {TypeExcludeFilter.class}
), @Filter(type = FilterType.CUSTOM,classes = {AutoConfigurationExcludeFilter.class}
)}
)
打开源码我们可以看到 , 除了元注解之外在SpringBootApplication中还提供了三种注解
- SpringBootConfigurtion --> 声明配置类
- EnableAutoConfiguration --> 自动装配
- ComponentScan --> 扫描包
那么SpringBoot自动装配就和EnableAutoConfiguration 该注解相关
@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 {};
}
在这里有两个很重要的注解
- @AutoConfigurationPackage
- @Import({AutoConfigurationImportSelector.class})
对于AutoConfigurationPackage它的作用是扫描我们在项目中自行定义的Bean(如Controller , Service , Dao层的Bean) , 其内部通过了Import导入了AutoConfigurationPackages.Registrar.class , 可以扫描项目当中的Bean
而@Import({AutoConfigurationImportSelector.class}) , 就是导入自动配置的选择器 , 该选择器会加载一个文件 , 该文件定义了很多自动配置的类
这里以RedisAutoConfiguration为列 , 我们看看都做了什么
@Configuration(proxyBeanMethods = false
)
@ConditionalOnClass({RedisOperations.class})
@EnableConfigurationProperties({RedisProperties.class})
@Import({LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class})
public class RedisAutoConfiguration {public RedisAutoConfiguration() {}@Bean@ConditionalOnMissingBean(name = {"redisTemplate"})@ConditionalOnSingleCandidate(RedisConnectionFactory.class)public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {RedisTemplate<Object, Object> template = new RedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}@Bean@ConditionalOnMissingBean@ConditionalOnSingleCandidate(RedisConnectionFactory.class)public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisConnectionFactory) {StringRedisTemplate template = new StringRedisTemplate();template.setConnectionFactory(redisConnectionFactory);return template;}
}
首先我们来看一个注解 @ConditionalOnClass({RedisOperations.class})
该注解是用来判断类路径当中是否包含该字节码文件 , 简单来说就是有没有导入对应的依赖 , 如果导入了才能创建该Bean
除此之外在创建Bean的过程中还会通过
@ConditionalOnMissingBean(
name = {“redisTemplate”}
)
来判断在Bean中是否已经存在过了名为redisTemplate的注解 , 以便于开发者自行配置
==========================================================
面试官:Springboot自动配置原理
候选人:
嗯,好的,它是这样的。
在Spring Boot项目中的引导类上有一个注解@SpringBootApplication,这个注解是对三个注解进行了封装,分别是:
- @SpringBootConfiguration
- @EnableAutoConfiguration
- @ComponentScan
其中@EnableAutoConfiguration
是实现自动化配置的核心注解。
该注解通过@Import
注解导入对应的配置选择器。关键的是内部就是读取了该项目和该项目引用的Jar包的的classpath路径下META-INF/spring.factories文件中的所配置的类的全类名。
在这些配置类中所定义的Bean会根据条件注解所指定的条件来决定是否需要将其导入到Spring容器中。
一般条件判断会有像@ConditionalOnClass
这样的注解,判断是否有对应的class文件,如果有则加载该类,把这个配置类的所有的Bean放入spring容器中使用。
相关文章:
SpringBoot自动装配原理
SpringBoot自动装配原理 在介绍SpringBoot自动装配原理之前我们需要先看一个注解 --> SpringBootApplication SpringBootApplication public class BackendApp {public static void main(String[] args) {SpringApplication.run(BackendApp.class, args);} }我们都知道Spr…...
Flask: flask框架是如何实现非阻塞并发的
写在前面:Flask框架是通过多线程/多进程+阻塞的socket实现非阻塞,其本质是基于python的源库socketserver实现的 前言 认识WSGI协议 认识Werkzeug flask是如何实现非阻塞的 本文使用的flask框架为最新的1.1.1版本,所有代码基于python3运行 一:前言 使用过flask或者其他web框…...
svg和canvas比较
SVG(Scalable Vector Graphics)和Canvas都是用于在网页上绘制图形的技术,但它们在工作原理、使用场景和特性上有所不同。以下是对SVG和Canvas的详细介绍及使用示例: 一、SVG 简介 SVG是一种基于XML的标记语言,用于描…...
【前端学习路线】(超详细版本)
先附上学习路线图:前端学习路线 第一阶段:前端入门(htmlcss) 前端最基本的知识,需要先将这些内容融汇贯通,学习后面内容才会不吃力。学习完可以做几个静态页练习一下。 推荐视频学习链接: 黑马程…...
VCU——matlab/simulink软件建模
一、认识MATLAB/Simulink 1. matlab主界面 2. simulink 二、Simulink 建模基础 1. Simulink模块 2. 模型的仿真 matlab 中比较两个浮点型,不要用,采取差值和Compare To Constant的方案 3. 自动代码生成...
ASP.NET Core SignalR 双工通信
01. 介绍 🎯 ASP.NET Core SignalR 是一个开放源代码库,它简化了向应用添加实时 Web 功能的过程。 实时 Web 功能使服务器端代码可以在服务器上激发事件时将事件推送到连接的客户端。 使用 SignalR,客户端也可以将消息发送到服务器ÿ…...
以数据驱动增长,火山引擎数智平台“数据找人”为双12营销提效
“双12”即将来临,众多商家最为关心的,莫过于如何借助对数据的充分利用实现降本增效,在竞争激烈的大环境中快人一步,为了达成这个目标,商家往往需要耗费人力、物力以及时间对海量数据进行寻找与分析。 那么,…...
VuePress学习
1.介绍 VuePress 由两部分组成:第一部分是一个极简静态网站生成器 (opens new window),它包含由 Vue 驱动的主题系统和插件 API,另一个部分是为书写技术文档而优化的默认主题,它的诞生初衷是为了支持 Vue 及其子项目的文档需求。…...
mysql cpu线上问题排查
查看当前的线程情况 show full processlist 查看当前的线程情况 SELECT * FROM performance_schema.threads WHERE PROCESSLIST_TIME > 0 查看当前数据库的连接数 SELECT * FROM performance_schema.threads WHERE PROCESSLIST_DB ‘db’ ; 查看当前mysql连接的数 SHOW GLO…...
QT6学习 第九天 QDialog
QT6学习第九天 QDialog 对话框 QDialog模态和非模态对话框标准对话框颜色对话框进度对话框 对话框 QDialog 模态和非模态对话框 QDialog 类是所有对话框类的基类。对话框是一个经常用来完成短小任务或和用户进行简单交互的顶层窗口。按照运行对话框时是否还可以和该程序的其…...
windows基础
系统目录 服务 端口 注册表 黑客常用DOS命令(在拿到shell时会用到) 一、 系统目录 Windows目录 系统的安装目录 System32configSAM文件 是用户密码的存储文件 System32etchost文件 记录本地解析(优先级大于DNS域名解析)可以自…...
《向量数据库指南》——OPPO分布式向量检索的实战与突破
OPPO对向量检索的探索:从单机到分布式的华丽转身 在当今这个数据爆炸的时代,如何高效地存储、检索和分析数据,成为了企业面临的一大挑战。特别是在人工智能领域,向量数据的处理更是占据了举足轻重的地位。OPPO,作为全球知名的智能手机制造商,自然也不会放过这个技术风口…...
golang语言机构和基础语法
语言结构和基础语法 1.包声明 2.引入包 3.函数 4.init函数 5.变量 6.标识符 7.行分隔符 8.语句&表达式 9.注释 10.公有成员与私有成员 11.关键字、保留字和预定义标志引用类型 1.切片 2.map 3.channel 4.interface 5.func 6.指针类型关键词 1.break 跳转语句,…...
在 MacOS 上为 LM Studio 更换镜像源
在 MacOS 之中使用 LM Studio 部署本地 LLM时,用户可能会遇到无法下载模型的问题。 一般的解决方法是在 huggingface.co 或者国内的镜像站 hf-mirror.com 的项目介绍卡页面下载模型后拖入 LM Studio 的模型文件夹。这样无法利用 LM Studio 本身的搜索功能。 本文将…...
python之Django连接数据库
文章目录 连接Mysql数据库安装Mysql驱动配置数据库信息明确连接驱动定义模型在模型下的models.py中定义表对象在settings.py 中找到INSTALLED_APPS添加创建的模型 测试testdb.py中写增删改查操作urls.py添加请求路径启动项目进行测试 连接Mysql数据库 安装Mysql驱动 pip inst…...
LLM学习笔记(15)LangChain、LlamaIndex、LlamaIndex
Transformer 和 PyTorch 是什么关系? Transformer和PyTorch可以很好地配合使用,但它们并不是同一层面的工具。具体来说: Transformer是一个神经网络的架构,最初用于自然语言处理,但也可以扩展到其他任务(…...
springai结合ollama
目录 ollama 介绍 使用 下载: 安装: 点击这个玩意next就行了。 运行 spring ai使用ollama调用本地部署的大模型 加依赖 配置yml 写代码 ollama 介绍 官网:Ollama Ollama是一个用于部署和运行各种开源大模型的工具; …...
扫描IP段内的使用的IP
扫描IP段内的使用的IP 方法一:命令行 命令行进入 for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%iarp -a方法二:python from scapy.all import ARP, Ether, srp import keyboarddef scan_network(ip_range):# 创建一个ARP请求包arp ARP(pds…...
ai即可一键生成ppt解决烦恼
在快节奏的职场环境中,制作PPT已经成为许多人日常工作的一部分。尽管PPT看似简单,却常常让人耗费大量时间。好在技术的进步为我们带来了全新的解决方案,比如智能生成PPT,让那些深夜加班的人看到了曙光。 从“手动排版”到“一键生…...
三、【docker】docker和docker-compose的常用命令
文章目录 一、docker常用命令1、镜像管理2、容器管理3、容器监控和调试4、网络管理5、数据卷管理6、系统维护7、实用组合命令8、常用技巧二、docker-compose常用命令1、基本命令2、构建相关3、运行维护4、常用组合命令5、实用参数 一、docker常用命令 1、镜像管理 # 查看本地…...
「Mac畅玩鸿蒙与硬件43」UI互动应用篇20 - 闪烁按钮效果
本篇将带你实现一个带有闪烁动画的按钮交互效果。通过动态改变按钮颜色,用户可以在视觉上感受到按钮的闪烁效果,提升界面互动体验。 关键词 UI互动应用闪烁动画动态按钮状态管理用户交互 一、功能说明 闪烁按钮效果应用实现了一个动态交互功能…...
小白爬虫——selenium入门超详细教程
目录 一、selenium简介 二、环境安装 2.1、安装Selenium 2.2、浏览器驱动安装 三、基本操作 3.1、对页面进行操作 3.1.1、初始化webdriver 3.1.2、打开网页 3.1.3、页面操作 3.1.4、页面数据提取 3.1.5、关闭页面 3.1.6、综合小案例 3.2、对页面元素进行操作 3.2.…...
斯坦福李飞飞《AI Agent:多模态交互前沿调查》论文
多模态AI系统很可能会在我们的日常生活中无处不在。将这些系统具身化为物理和虚拟环境中的代理是一种有前途的方式,以使其更加互动化。目前,这些系统利用现有的基础模型作为构建具身代理的基本构件。将代理嵌入这样的环境中,有助于模型处理和…...
Wordpress ElementorPageBuilder插件存在文件读取漏洞(CVE-2024-9935)
免责声明: 本文旨在提供有关特定漏洞的深入信息,帮助用户充分了解潜在的安全风险。发布此信息的目的在于提升网络安全意识和推动技术进步,未经授权访问系统、网络或应用程序,可能会导致法律责任或严重后果。因此,作者不对读者基于本文内容所采取的任何行为承担责任。读者在…...
多模态视频大模型Aria在Docker部署
多模态视频大模型Aria在Docker部署 契机 ⚙ 闲逛HuggingFace的时候发现一个25.3B的多模态大模型,支持图片和视频。刚好我有H20的GPU所以部署来看看效果,因为我的宿主机是cuda-12.1所以为了防止环境污染采用docker部署,通过一系列的披荆斩棘…...
【网盘系统】递归删除批量文件
为何需要用到递归? 在网盘系统中,文件的类型分为文件和文件夹两种类型。当我们想要批量删除文件时,不乏其中会包含文件夹,而想要删除这个文件夹,自然其中所包含的文件都要删除,而其中所包含的文件也有可能…...
产品转后端?2
产品经理的视角能让你成为更好的后端工程师: 理解业务需求转换为技术方案的过程知道为什么要这样设计API明白数据结构的选择如何影响用户体验了解性能指标对业务的实际影响 在实习过程中可以有意识地向后端倾斜: 常规产品经理工作: "…...
电子商务人工智能指南 2/6 - 需求预测和库存管理
介绍 81% 的零售业高管表示, AI 至少在其组织中发挥了中等至完全的作用。然而,78% 的受访零售业高管表示,很难跟上不断发展的 AI 格局。 近年来,电子商务团队加快了适应新客户偏好和创造卓越数字购物体验的需求。采用 AI 不再是一…...
CSS中要注意的样式效果
1. 应用过渡效果 transition: var(--aa); 2.告诉浏览器元素可能会发生变换,从而优化性能。 will-change: transform; 3.使元素不响应鼠标事件。 pointer-events: none; 4.隐藏水平方向上的溢出内容 overflow-x: hidden; 5.定义一个元素的宽度和高度之间的比…...
CTFshowPHP特性
目录 web89 代码分析 playload web90 代码分析 playload web91 代码分析 playload web92 代码分析 playload web93 代码分析 playload web94 代码分析 playload web95 web96 代码分析 playload web97 代码分析 playload web98 代码分析 playload w…...
基于Springboot+Vue的电子博物馆系统
基于SpringbootVue的电子博物馆系统 前言:随着信息技术的不断发展,传统博物馆的参观方式逐渐向数字化、在线化转型。电子博物馆作为这一转型的重要组成部分,能够通过信息化手段为用户提供更丰富、更便捷的博物馆参观体验。本文基于Spring Boo…...
HarmonyOS:使用HTTP访问网络
HTTP 一、导入http模块 module.json5里添加网络权限 导入http模块 二、创建http请求 创建http请求 import { http } from kit.NetworkKitfunction getNetData() {// 创建数据请求对象let httpRequest http.createHttp() }三、发起请求 请求方法 四、请求示例 GET请求 PO…...
sqlmap --os-shell的原理(MySQL,MSSQL,PostgreSQL,Oracle,SQLite)
1. MySQL 条件 数据库用户需要具备高权限(如 FILE 权限)。数据库服务运行用户需要对目标目录有写权限。Web 服务器有可写目录,且支持执行上传的脚本(如 PHP、JSP 等)。 原理 利用 MySQL 的 SELECT ... INTO OUTFIL…...
浅谈网络安全态势感知
一、基本概念 前美国空军首席科学家Endsley博士给出的动态环境中态势感知的通用定义是: 态势感知是感知大量的时间和空间中的环境要素,理解它们的意义,并预测它们在不久将来的状态。 在这个定义中,我们可以提炼出态势感知的三个要素…...
【大模型】ChatGPT 提示词优化进阶操作实战详解
目录 一、前言 二、ChatGPT 提示词几个基本的优化原则 2.1 明确的提示词 2.1.1 提示词具体而清晰 2.1.1.1操作案例演示 2.2 确定焦点 2.2.1 操作案例演示 2.3 保持提示词的相关性 2.3.1 什么是相关性 2.3.2 提示词相关性操作案例一 2.3.2 提示词相关性操作案例二 三…...
【计算机网络】实验11:边界网关协议BGP
实验11 边界网关协议BGP 一、实验目的 本次实验旨在验证边界网关协议(BGP)的实际作用,并深入学习在路由器上配置和使用BGP协议的方法。通过实验,我将探索BGP在不同自治系统之间的路由选择和信息交换的功能,理解其在互…...
【Linux系统】System V 的 IPC 机制在 Linux 系统中的实现
System V 的 IPC(Inter-Process Communication,进程间通信) 机制是 UNIX 系统中的一大特色,用于在不同进程之间共享数据或同步操作。Linux 系统完整实现了 System V 的 IPC 机制,并在其基础上进行了优化和扩展。这些机…...
计算机网络安全
从广义来说,凡是涉及到网络上信息的机密性、报文完整性、端点鉴别等技术和理论都是网络安全的研究领域。 机密性指仅有发送方和接收方能理解传输报文的内容,而其他未授权用户不能解密(理解)该报文报文完整性指报文在传输过程中不…...
30.100ASK_T113-PRO 用QT编写视频播放器(一)
1.再buildroot中添加视频解码库 X264, 执行 make menuconfig Target packages -->Libraries --> Multimedia --> X264 CLI 还需要添加 FFmpeg 2. 保存,重新编译 make all 3.将镜像下载开发板...
攻防世界 ctf刷题 新手区1-10
unserialize3 因为我上个笔记写了 php返序列化 所以先趁热打铁 看这个题目名字 我们就知道是 反序列化呀 因为flag有值所以 我们先输个 111 看看有没有线索 没线索但是这边 有个发现就是他是使用get方式传参的 可能他会把我们的输入 进行传入后台有可能进行反…...
DAY35|动态规划Part03|LeetCode:01背包问题 二维、01背包问题 一维、416. 分割等和子集
目录 01背包理论基础(一) 基本思路 C代码 01背包理论基础(二) 基本思路 C代码 LeetCode:416. 分割等和子集 基本思路 C代码 01背包理论基础(一) 题目链接:卡码网46. 携带研究材料 文字…...
三款电容麦的对比
纸面参数 第一款麦克风 灵敏度: -36 dB 2 dB(0 dB1V/Pa at 1 kHz) 灵敏度较低,需要更高的增益来拾取同样的音量。频率响应: 40 Hz - 18 kHz 响应范围较窄,尤其在高频区域。等效噪音级: ≤18 dB(A计权) 噪…...
【实战攻略】如何从零开始快速实现深度学习新想法?——四步走战略
标题 【实战攻略】如何从零开始快速实现深度学习新想法?——四步走战略 【核心结论】 通过四步走战略,即找到baseline论文、深入baseline代码、搭建自己的pipeline、融入核心算法,新手也能快速实现深度学习新想法。 【通俗解释࿰…...
Python+OpenCV系列:入门环境搭建、图像读写、像素操作、色彩空间和通道、
入门环境搭建、图像读写、像素操作、色彩空间和通道 **Python与OpenCV环境搭建、图像处理与色彩空间介绍****引言****1. Python和OpenCV的环境搭建****1.1 安装Python和OpenCV****1.2 配置开发环境** **2. 图像的读取、显示与保存****2.1 图像的读取****2.2 图像的显示****2.3 …...
如何在鸿蒙API9和x86模拟器中使用MQTT
目录 引言 安装MQTT软件包 避免MQTT软件包自动升级 程序的编写 运行测试 结语 引言 虽然我的课主要是OpenHarmony南向开发的,但是结课时有个同学说他在写鸿蒙APP时无法将MQTT库加入到设备中,希望我帮忙看看。由于他没有鸿蒙的真机,只能…...
http multipart/form-data 数据如何分块传输是一次传输还是多次
multipart/form-data 是一种用于 HTTP 协议中传输数据的格式,它用于传输数据量较大的数据,如文件等。在 multipart/form-data 中,数据可以被分成多个部分(chunk),这些部分之间通过特定的分隔符进行分隔。 …...
️️耗时一周,肝了一个超丝滑的卡盒小程序
前言 先看看成品效果: 在上个月,我出于提升自己的英语造句能力的目的,想要找一个阅读或者练习造句类的英语学习 APP,但是最终找了几个 APP 不是不太好用就是要付费。于是我转换思路,找到了一本书,叫《36…...
ubuntu的matlab使用心得
1.读取视频 v VideoReader(2222.mp4);出问题,报错: matlab 错误使用 VideoReader/initReader (第 734 行) 由于出现意外错误而无法读取文件。原因: Unable to initialize the video properties 出错 audiovideo.internal.IVideoReader (第 136 行) init…...
vscode插件 live-server配置https
背景:前端有时候需要在本地搭建https环境测试某些内容(如https下访问http资源,下载) 步骤: 1.vscode集成开发软件(应该所有前端开发同学都安装了,我用webstorm,vscode备用) 2.vscode安装live…...
腾讯最新图标点选验证码
注意,本文只提供学习的思路,严禁违反法律以及破坏信息系统等行为,本文只提供思路 如有侵犯,请联系作者下架 本文识别已同步上线至OCR识别网站: http://yxlocr.nat300.top/ocr/iconclick/9 注意:后续点选验证码内容我不会再讲那么详细,毕竟点选验证训练很多读者都会,而…...
这不是电诈,是血腥的恐怖主义,东大派兵反恐,拿下北缅!
我昨晚失眠了,因为手机不断给我推送同胞在泰国和缅甸失踪被卖的内容。几个从缅甸园区逃跑回来的年轻人,讲述了自己恐怖的经历:充满粪便的水牢;满是苍蝇的编织袋(里面是啥我就不说了)就扔在路边;每个几米就是一个的小坟包;还有满是污血的大通铺………...
以色列和哈马斯签署加沙停火换俘协议
据《以色列时报》17日报道,以色列与巴勒斯坦伊斯兰抵抗运动(哈马斯)签署加沙停火换俘协议。...
公安部公布王星被骗至泰缅边境细节,已抓获12人
近期,演员王某、灯光师孙某强等多名中国公民被骗至泰缅边境后失联、被困,引发社会高度关注。公安部部署相关地方公安机关全面梳理摸排境外失联、被困人员情况,积极协调驻外使领馆等相关部门,全力开展人员解救和案件侦查调查。经工作,王某、孙某强、杨某琪、吴某琪、林某玲…...
岛内景点被喷简体字“中国台湾省”引不满,国台办回应
中国台湾网1月15日讯 国务院台湾事务办公室今天上午举行例行新闻发布会,国台办发言人陈斌华主持本次新闻发布会。台湾《联合报》记者:台湾兰屿有景点近日被不明人士用白漆喷上简体字“中国台湾省”,引发当地居民不满。有网民质疑此行为为陆客所为,担心若…...
尹锡悦,还能硬撑多久?
当地时间今天下午14时,已被停职的韩国总统尹锡悦迎来了又一次考验。韩国宪法法院就尹锡悦弹劾案进行首次法庭辩论,这是弹劾案审理在经历两次预备庭之后,正式进入最为关键的法庭辩论阶段。由于尹锡悦没有参加今天的庭审,辩论无从谈起,仅仅持续4分钟左右便宣告结束。在辩论开…...
最高利率4.6%,美元定存持续火热,银行调整步伐或将放缓
日前,随着美国非农就业数据超预期,市场对美联储降息预期有所减弱。国内银行也打算放慢调整美元存款利率的步伐。“若降息预期持续减弱,银行可能放缓或暂停下调美元存款利率。”外资行人士对记者表示。据记者了解,经过去年美联储三次降息,美元存款利率已…...