SpringBoot源码阅读2-自动配置

SpringBoot源码阅读2-自动配置

在传统的Spring应用中,开发者需要手动配置一系列Web应用的核心组件,例如DispatcherServlet用于处理请求分发、ViewResolver用于视图解析、CharacterEncodingFilter用于字符编码过滤等。

然而在SpringBoot中只要引入了spring-boot-starter-web时,SpringBoot会根据约定和条件自动配置这些组件。例如,它会自动注册DispatcherServlet、配置默认的ViewResolver,并添加适当的字符编码过滤器,使得Web应用能够正常工作。

那么问题来了

问题1:SpringBoot是如何进行自动配置的?会进行那些组件的自动配置?

SpringBoot应用程序的入口是主程序,即标注了@SpringBootApplication注解的类就是主程序类,因此一切都要从@SpringBootApplication注解开始。

源码分析:

1、@SpringBootApplication注解

@Target(ElementType.TYPE) // 适用范围 -> TYPE表示可以使用在 类 | 接口 | 注解 | 枚举 中
@Retention(RetentionPolicy.RUNTIME) // 生命周期 -> RUNTIME表示运行时
@Documented // 可以记录在javadoc中
@Inherited // 可以被子类继承该注解
// ---------------------- 核心是下面三个注解
@SpringBootConfiguration // 标注该类为配置类
@EnableAutoConfiguration // 启动自动配置功能
@ComponentScan(excludeFilters = { @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) }) // 注解扫描
public @interface SpringBootApplication {...
}

2、@SpringBootConfiguration注解

组合了@Configuration注解,标注当前类是主配置类,我们在主程序类中声明的bean、或者是@RestController起作用,
也是这个注解的功劳。

例如下图在主程序中为什么这几个注解可以生效也是注解@SpringBootConfiguration的功劳。

3、@EnableAutoConfiguration注解

启动自动配置功能核心注解,Spring中有很多以@Enable开头的注解,其作用就是借助@Import来收集并注册特定场景相关的bean,并加载到spring容器中。而 @EnableAutoConfiguration 就是借助 @Import 来收集所有符合自动配置条件的bean定义,并加载到Spring容器。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL中的Performance Schema是什么?

MySQL中的Performance Schema是什么? Performance Schema 是 MySQL 的一个特性,主要用于监控 MySQL 服务器在运行时的性能和资源使用情况。它首次引入于 MySQL 5.5 版本,并在后续版本中得到增强。Performance Schema 提供了一种方式来收集数…

新药品注册分类5大类的注册标准

在医药行业的浩瀚海洋中,药品注册分类就如同一座明亮的航标灯,指引着每一款新药从实验室走向市场,从理论概念变成患者手中的生命希望。本文将深入探讨化学药、中药、生物药的药品注册分类标准,药品分类常见问题、以及如何高效查询…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.6-1.8

目录 第一门课:第二门课 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)…

12 JavaScript学习: 字符串

JavaScript 字符串 JavaScript 字符串是一种用于存储和操作文本数据的数据类型。字符串可以包含字母、数字、符号和空格等字符。在 JavaScript 中,字符串可以使用单引号()或双引号(")来定义。 例如:…

发那科FANUC机器人R-2000iB平衡缸维修攻略

在发那科机器人中,平衡缸扮演着稳定机械臂运动的关键角色。它通过内部的压力调节来平衡负载,保证机器人的精准定位和平稳操作。一旦出现法兰克机械手平衡缸故障或损坏,机器人的性能可能会大打折扣,因此及时且正确的FANUC机械手平衡…

初步认识Vscode

4.26初步认识Vscode (一)快捷键的使用 1. 打开控制端 ctrl ~2. 结束终端 ctrl c3. 多行同时对齐输出 按住shift alt 光标多选4. 多行同时任意位置输出 按住alt 光标单点你想要输入的位置5. 代码太长了,想混行编辑 alt z6. 打开设置控制…

链表基础(代码注释很多,帮助你更好理解)

概述: 什么是链表? 1、链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,有一系列结点(地址)组成,结点可动态的生成。 2、结点包括两个部分&…

003基于SSM的学生选课系统(学生信息管理系统)ssm+mysql

003基于SSM的学生选课系统/学生信息管理系统 开发环境: Eclipse/MyEclipse、Tomcat8、Jdk1.8 数据库: MySQL 前端:JavaScript、jQuery、bootstrap4、particles.js 后端:maven、SpringMVC、MyBatis、ajax、mysql读写分离、mybat…

【目标检测】基于深度学习的酒瓶表面瑕疵缺陷检测(yolov5算法,6个类别,附代码和数据集)

写在前面: 首先感谢兄弟们的关注和订阅,让我有创作的动力,在创作过程我会尽最大能力,保证作品的质量,如果有问题,可以私信我,让我们携手共进,共创辉煌。(专栏订阅用户订阅专栏后免费提供数据集和源码一份,超级VIP用户不在服务范围之内) 路虽远,行则将至;事虽难,做…

JavaEE初阶——文件操作和IO

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享文件操作及IO的内容 如果有不足的或者错误的请您指出! 目录 *1.解释IO**2.关于文件的基本知识*2.1路径2.1.1绝对路径2.1.2相对路径 2.2文件分类 *3.通过Java代码操作文件*3.1针…

Java毕业设计 基于SpringBoot vue城镇保障性住房管理系统

Java毕业设计 基于SpringBoot vue城镇保障性住房管理系统 SpringBoot 城镇保障性住房管理系统 功能介绍 首页 图片轮播 房源信息 房源详情 申请房源 公示信息 公示详情 登录注册 个人中心 留言反馈 后台管理 登录 个人中心 修改密码 个人信息 用户管理 房屋类型 房源信息管理…

红海云入选HRoot2023年度人力资源服务机构100强

4月26日,中国领先的人力资源媒体HRoot主办的『存在与现在——重新审视企业管理中的常识』2024 HRoot人力资本论坛在北京隆重举行,论坛汇聚人力资源领域的前沿实践者与行业思想领袖,与CEO、CHRO、人力资源总监、人力资源经理等企业高管&#x…