SpringBoot约定大于配置
什么是约定大于配置
"约定大于配置"(Convention Over Configuration)是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构建高效的应用程序
SpringBoot如何实现约定大于配置
@SpringBootApplication
在springboot项目中,我们会使用@SpringBootApplication注解在启动类上,它提供了相当多的便利性,帮助我们完成了当前启动类目录下的组件扫描和自动配置,其源码如下
可以看到它是一个组合注解,相当于声明了@Configuration、@EnableAutoConfiguration和@ComponentScan,而自动装配实现的秘密就在@EnableAutoConfiguration注解上
@EnableAutoConfiguration
查看@EnableAutoConfiguration源码,发现它注入了一个AutoConfigurationImportSelector类型的bean,继续跟进
AutoConfigurationImportSelector
我们查看一下AutoConfigurationImportSelector类关系图
AutoConfigurationImportSelector是做什么的呢?该类上的javadoc有这么一句话,“DeferredImportSelector to handle auto-configuration”,deferred的意思是推迟的,意为处理自动装配的推迟的ImportSelector
DeferredImportSelector 是 ImportSelector的子类,它在所有@Configuration bean都处理完毕后运行。而AutoConfigurationImportSelector实现了DeferredImportSelector接口,并实现了该接口的selectImports方法
查看selectImports方法发现,内部的getAutoConfigurationEntry方法就返回了要装配的@Configuration类
其中最关键的是getCandidateConfigurations方法,源码如下
这里调用了SpringFactoriesLoader.loadFactoryNames返回所有的自动装配类,这个方法的第一个入参就是EnableAutoConfiguration.class,第二个入参是获取的类加载器
loadSpringFactories
继续跟进源码,查看最底层的loadSpringFactories方法
可以看到,loadSpringFactories方法通过类加载器获取META-INF/spring.factories资源,我们项目中的类路径下的(当然包括三方jar包)所有META-INF/spring.factories都会被读取,并返回被自动装配的类
META-INF/spring.factories
spring-boot-autoconfigure模块是springboot的自动装配模块
查看该模块下的spring.factories文件
可以看到,该文件下已经帮我们配置了相当多的Configuration类,这也是springboot实现约定大于配置的关键,至此谜团解开
相关文章:

SpringBoot约定大于配置
什么是约定大于配置 "约定大于配置"(Convention Over Configuration)是一种理念,旨在通过默认约定和规则来减少开发人员需要做的配置工作。在Spring Boot框架中,这一原则得到了充分应用,帮助开发者更快地构…...

DHCP自动获取IP地址实验(华为)
思科设备参考:DHCP自动获取IP地址实验(思科) 一,实验目的 路由器搭载DHCP,让PC通过DHCP自动获取IP地址 二,不划分vlan--全局地址池 实验拓扑 配置命令 Router <Huawei>system-view [Huawei]ip po…...
探索Terraform实践:优化基础设施管理
Terraform 是管理基础设施及代码(IaC)最常用的工具之一,它能使我们安全且可预测地对基础设施应用更改。 Terraform作为一个强大的基础设施即代码工具,为开发人员和运维团队提供了一种简单而强大的方式来定义、部署和管理基础设施。…...
MYSQL高级_目录
2024持续更新中… MYSQL01高级_Linux版安装、各级别字符集、字符集与比较规则、SQL大小写规范 MYSQL02高级_目录结构、默认数据库、表文件、系统独立表空间 MYSQL03高级_新增用户、授予权限、授权底层表结构、角色理解 MYSQL04高级_逻辑架构剖析、查询缓存、解析器、优化器、执…...

MongoDB获评2023年Gartner®云数据库管理系统“领导者”
MongoDB 很荣幸在《2023 年 Gartner 云数据库管理系统 (CDBMS) 魔力象限》报告中被评为领导者。我们相信这一成就让 MongoDB 成为唯一一家连续两年斩获“领导者”称号的纯应用程序数据库服务提供商。 社区及开发者数据平台用户的需求一向是 MongoDB 关注的重点,而这…...

基于FastAPI构造一个AI模型部署应用
前言 fastapi是目前一个比较流行的python web框架,在大模型日益流行的今天,其云端部署和应用大多数都是基于fastapi框架。所以掌握和理解fastapi框架基本代码和用法尤显重要。 需要注意的是,fastapi主要是通过app对象提供了web服务端的实现代…...

【Unity】使用ScriptableObject存储数据
1.为什么要用ScriptableObject? 在游戏开发中,有大量的配置数据需要存储,这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txt,excel等等 但是你们有没有想过,假设你使用的是json&#x…...
ChatGPT聊天机器人数据隐私和安全问题
ChatGPT是否安全使用? 是的,ChatGPT是安全的,因为它无法对你或你的计算机造成任何直接损害。由于网页浏览器和智能手机操作系统都使用了沙箱技术,因此ChatGPT无法访问你设备的其余部分。换句话说,当你使用ChatGPT应用程…...
MyBatis三个经典问题
1. Mybatis的执行流程 MyBatis 是一个流行的 Java 持久化框架,提供了对象关系映射 (ORM) 和 SQL 映射的功能,使开发者能够更加方便地与数据库交互。MyBatis 的执行流程大致如下: 配置阶段: 加载配置文件: MyBatis 通过读取配置文件ÿ…...

JavaEE+springboot教学仪器设备管理系统o9b00-springmvc
本文旨在设计一款基于Java技术的教学仪器设备销售网站,以提高网站性能、功能完善、用户体验等方面的优势,解决现有教学仪器设备销售网站的问题,并为广大教育工作者和学生提供便捷的教学仪器设备销售渠道。本文首先介绍了Java技术的相关基础知…...

Java项目:37 springboot003图书个性化推荐系统的设计与实现
作者主页:源码空间codegym 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 springboot003图书个性化推荐系统的设计与实现 管理员:首页、个人中心、学生管理、图书分类管理、图书信息管理、图书预约管理、退…...
mysql 8 修改账号密码
一 进入Mysql bin目录 cmd 运行(跳过密码),运行完不要关闭 mysqld --console --skip-grant-tables --shared-memory 二 新打开一个cmd mysql bin 目录下登录,密码输入时,直接回车 mysql -uroot -p 三 修改密码 m…...
拜占庭将军问题与区块链
文章目录 拜占庭将军问题问题背景问题的现实意义将军-副官模型三将军问题四将军问题3m将军问题 口头消息算法基本假设方法介绍正确性证明 签名消息算法 区块链区块链是什么区块链对于拜占庭将军问题的解决方法工作量证明奖励机制最长链原则小结 区块链的意义 总结 拜占庭将军问…...

字节跳动热门的前端开源项目
字节跳动开源官网 Arco Dsign Arco Design 是一套设计系统,主要服务于字节跳动旗下中后台产品的体验设计和技术实现。它的目标在于帮助设计师与开发者解放双手、提升工作效率,并高质量地打造符合业务规范的中后台应用。它拥有系统的设计规范和资源&…...

uniapp+vue基于Android的图书馆借阅系统qb4y3-nodejs-php-pyton
uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 框架支持:springboot/django/php/Ssm/flask/express均支持 前端开发:vue 语言:pythonjavanode.jsphp均支持 运行软件:idea/eclip…...

RabbitMQ如何实现延迟消息?
RabbitMQ中是可以实现延迟消息的,一般有两种方式,分别是通过死信队列以及通过延迟消息插件来实现。 扩展: 死信队列 当rabbitMQ中的一条正常的消息,因为过了存活时间(TTL过期),队列长度超限&a…...

Svg Flow Editor 原生svg流程图编辑器(一)
效果展示 项目概述 svg flow editor 是一款流程图编辑器,提供了一系列流程图交互、编辑所必需的功能,支持前端研发自定义开发各种逻辑编排场景,如流程图、ER 图、BPMN 流程等。 目前也有比较好的流程图设计框架,但是还是难满足项目…...

头像剪切上传
头像剪切上传 文章说明核心Api示例源码效果展示源码下载 文章说明 本文主要为了学习头像裁剪功能,以及熟悉canvas绘图和转文件的相关操作,参考教程(Web渡一前端–图片裁剪上传原理) 核心Api 主要就一个在canvas绘图的操作 context…...
24计算机考研调剂 | 北京信息科技大学
北京信息科技大学接收调剂研究生 考研调剂招生信息 学校:北京信息科技大学 专业:工学->控制科学与工程->控制理论与控制工程 年级:2024 招生人数:- 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP查看) 补充内容 各位同学,…...

06 - 镜像管理
1 了解镜像 Docker镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。 但注意, 镜像不包含任何动态数据&#…...
Admin.Net中的消息通信SignalR解释
定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
服务器硬防的应用场景都有哪些?
服务器硬防是指一种通过硬件设备层面的安全措施来防御服务器系统受到网络攻击的方式,避免服务器受到各种恶意攻击和网络威胁,那么,服务器硬防通常都会应用在哪些场景当中呢? 硬防服务器中一般会配备入侵检测系统和预防系统&#x…...

(转)什么是DockerCompose?它有什么作用?
一、什么是DockerCompose? DockerCompose可以基于Compose文件帮我们快速的部署分布式应用,而无需手动一个个创建和运行容器。 Compose文件是一个文本文件,通过指令定义集群中的每个容器如何运行。 DockerCompose就是把DockerFile转换成指令去运行。 …...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
Java毕业设计:WML信息查询与后端信息发布系统开发
JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息࿰…...

排序算法总结(C++)
目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指:同样大小的样本 **(同样大小的数据)**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...

渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...

C++_哈希表
本篇文章是对C学习的哈希表部分的学习分享 相信一定会对你有所帮助~ 那咱们废话不多说,直接开始吧! 一、基础概念 1. 哈希核心思想: 哈希函数的作用:通过此函数建立一个Key与存储位置之间的映射关系。理想目标:实现…...