当前位置: 首页 > news >正文

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的类可以找到下面自动加载自动配置的映射。

写了一半用空补补

http://www.dtcms.com/a/3908.html

相关文章:

  • 一步一步详细介绍如何使用 OpenCV 制作低成本立体相机
  • css实现div倾斜效果
  • SDWAN(Software Defined Wide Area Network)概述与优势分析
  • 用于图像处理的高斯滤波器 (LoG) 拉普拉斯
  • hdlbits系列verilog解答(100位BCD加法器)-43
  • 解决win11更新后,文件夹打不开的bug
  • KafkaConsumer 消费逻辑
  • pytorch DistributedDataParallel 分布式训练踩坑记录
  • Clickhouse学习笔记(5)—— ClickHouse 副本
  • 新方向!文心一言X具身智能,用LLM大模型驱动智能小车
  • spring boot security 自定义AuthenticationProvider
  • 软考 系统架构设计师系列知识点之边缘计算(5)
  • 力扣138:随机链表的复制
  • CHATGPT----自然辩证法分析
  • 【Hadoop实战】Hadoop指标系统V2分析
  • Spring Boot 3.0正式发布及新特性解读
  • 文件的想对
  • 竞赛选题 深度学习疲劳驾驶检测 opencv python
  • vue+iView实现下载zip文件导出多个excel表格
  • WebSphere Liberty 8.5.5.9 (二)
  • Unity中关于Lerp()方法的使用
  • k8s存储
  • Python与ArcGIS系列(二)获取地图文档
  • 【SpringBoot】手写模拟SpringBoot核心流程
  • 超强C语言跨年烟花代码,精美无比,附源码分步解析
  • No source control providers registered
  • 小程序 打开方式 页面效果 表单页面 点击跳到详情页 图标 获取后台数据 进行页面渲染
  • 智安网络|探索人机交互的未来:自然语言处理的前沿技术
  • C# wpf 实现任意控件(包括窗口)更多拖动功能
  • 【Spring生命周期核心底层源码之剖析】