springboot手写源码总结
先创建spring容器,然后将配置类(也就是启动类,因为上面有标注@ComponentScan和@Configuration注解)注册到spring容器中去,进行扫描。然后将spring容器绑定到servlet中,将servlet添加到tomcat容器中。
具体是现是下面的这一行代码:
tomcat.addServlet(contextPath, "dispatcher", new DispatcherServlet(applicationContext));
子项目依赖父项目,怎样让父项目中的某个jar包不传递到子项目中,解决办法是是将父项目中的那个jar包下面添加上optional标签。
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-core</artifactId><version>9.0.60</version><optional>true</optional>
</dependency>
使用ImportSelector接口,可以批量的向ioc容器中导入配置类。
springboot为了提高启动速度,这些自动配置类不是都需要进行加载的,那么他是怎样进行判断的,答案是通过自动配置类上面的@ConditionnalOnClass注解进行判断的,以
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package org.springframework.boot.autoconfigure.amqp;@Configuration(proxyBeanMethods = false
)
// 会判断RabbitTemplate和Channel这两个类是否在容器中存在
// 要想判断这两个类是否存在,需要先加载RabbitAutoConfiguration类,然后再加载@ConditionalOnClass注解标注的这两个类,这对springboot来说是非常耗费时间的,所以springboot做了提前映射。
@ConditionalOnClass({RabbitTemplate.class, Channel.class})
@EnableConfigurationProperties({RabbitProperties.class})
@Import({RabbitAnnotationDrivenConfiguration.class})
public class RabbitAutoConfiguration {public RabbitAutoConfiguration() {}// 省略代码
}
在spring-autoconfigure-metadata.properties配置文件中
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration.ConditionalOnClass=com.rabbitmq.client.Channel,org.springframework.amqp.rabbit.core.RabbitTemplate
这样springboot就不用加载RabbitAutoConfiguration类了。
在springboot3中做了优化,不会再去加载spring.factories配置文件了,而是把自动配置类单独抽取出来放到了一个配置文件中了。
下来看看徐庶老师讲解的springboot3新特性。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/908376.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!相关文章
完整教程:Docker Compose 一键启动多容器服务
完整教程:Docker Compose 一键启动多容器服务pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…
【截稿倒计时、高录用、稳检索】2025年教育创新与信息技术国际学术会议(EIIT 2025)
【高录用、稳检索】
2025年教育创新与信息技术国际学术会议
2025 International Conference on Educational Innovation and Information Technology (EIIT 2025)
教育、创新、信息科学相关主题方向均可投稿
*参会者现…
低代码 + AI 构建智慧校园系统:某高校宿舍报修平台的48小时构建全流程
低代码 + AI 构建智慧校园系统:某高校宿舍报修平台的48小时构建全流程pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &…
[MCP][07]logging和progress等功能说明
除了基础的Prompt、Resource和Tool概念,FastMCP还提供了以下功能:Sampling、Elicitation、Logging、Progress、Proxy、Middleware、Composition和Authentication功能前言
截至目前(2025年9月19日),除了基础的Prom…
Microsoft OLE漏洞致远程代码执行安全公告解析
微软发布安全公告3010060,披露Windows OLE组件远程代码执行漏洞。攻击者通过特制PowerPoint文件实施定向攻击,本文提供受影响环境、攻击向量及临时缓解方案(Fix it工具、UAC配置、EMET部署)的详细技术指导。セキュ…
写代码还是写提示词?——Prompt 工程是不是程序员的新技能树
过去二十年,程序员的核心技能几乎没变:学语言、写代码、调 bug。但是 AI 大模型的出现,正在悄悄改写这套逻辑。
有人开始疑惑:👉 “未来的程序员,还需要会写代码吗?”👉 “Prompt 工程(提示词工程)是不是新…
c-store发送dcm文件超时
错误代码:FellowOakDicom.Network.DicomAssociationRequestTimedOutException:“The association request timed out 3 times, waiting 5000ms each time for the association response等超时返回解决方案:首先要明白…
解码C语言模块化编程
一、模块化设计原则原则
说明
示例高内聚
模块内部功能紧密相关
将数学计算函数集中到 math_utils 模块低耦合
模块间依赖最小化(通过接口通信)
使用头文件声明接口,隐藏实现细节单一职责
每个模块只解决一个特定问…
redis存储漂流瓶信息
问题
比如漂流瓶的数据,都放在redis里,支持12小时过期,支持最大捡起数,支持重复捡取。
漂流了内容,有头像,昵称,内容(文字,语音),年龄,城市,过期时间,读取次数。
支持随机捡瓶子。 使用tp5需要怎么设计…
hashcat高效爆破Wi-Fi密码方法(比aircrack-ng快)
(tip:本文所有操作在个人测试环境下运行,请不要用于违法行为)
准备工具:
电脑
kali-linux-2025.2系统(4G内存以上)
----在aircrack爆破时,无线网络审计套件(aircrack-ng)作为内置模组组件常用于一体化流程爆破密…
更新到macOS Sequoia后,chrome无法用ip访问192.168.*
设置 -> 隐私与安全 -> 本地网络 开启chrome按钮
System Settings -> Privacy & Security -> Local Network
Typora标题自动显示序号,大纲中也显示序号
Typora标题自动显示序号,大纲中也显示序号
代码一:一级标题显示序号点击查看代码
/*************************************** Header Counters in TOC (目录中的标题计数器)**************************************/…
【IEEE出版、格林威治大学主办】第六届信息科学与并行、分布式处理国际学术会议(ISPDS 2025)
第六届信息科学与并行、分布式处理国际学术会议(ISPDS 2025)
2025 6th International Conference on Information Science, Parallel and Distributed Systems
在这里看会议官网详情
2025年10月31日-11月2日 | 英国-…
Snipaste 2.10.1.dmg截图安装教程|Mac电脑拖拽安装详细步骤
Snipaste 2.10.1.dmg截图安装教程|Mac电脑拖拽安装详细步骤Snipaste 是一款超好用的 截图 + 贴图工具,特别适合 Mac 用户日常使用。
第一步:下载文件
(这一步你可能已经完成了)
安装包下载…
Day18面向对象的基本认识与回顾方法的定义
package oop;import java.io.IOException;//类:Demo1
public class Demo1 {//main:方法public static void main(String[] args) {}/*修饰符 返回值类型 方法名(.....){方法体return 返回值}*///return 结束方法…
【2025-09-19】连岳摘抄
23:59大家知道,时间有时像鸟儿一样疾飞,有时像蠕虫一样爬行,不过,当一个人觉察不到时间的快慢时,他往往会感到特别幸福。——屠格涅夫本科学历有没有用呢?或者说,教育有没有用呢?一、当然是有用的。因为我们这…
【2025-09-18】工作情绪
20:00人间是值得赞美的,生活应加以珍惜。——启功昨晚临下班前,又下了一场大雨。然而我还是没有开车上班。最后我还是投不了球,也做不了其它运动,就这样坐在办公室等何太下班来接我。一等,又是两个小时。加上白天…
Ubuntu 系统部署 LNMP 环境详细教程(附shell脚本一键部署↓) - 指南
Ubuntu 系统部署 LNMP 环境详细教程(附shell脚本一键部署↓) - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: &q…
详细介绍:7HTMLCSS高级
详细介绍:7HTMLCSS高级pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", &qu…