大牛深入解析SpringBoot核心运行原理和运作原理源码
SpringBoot核心运行原理Spring Boot 最核心的功能就是自动配置 , 第 1 章中我们已经提到 , 功能的实现都是基于“约定优于配置”的原则 。 那么 Spring Boot 是如何约定 , 又是如何实现自动配置功能的呢?
本章会带领大家通过源码学习 Spring Boot 的核心运作原理 , 内容涉及自动配置的运作原理、核心功能模块、核心注解以及使用到的核心源代码分析 。
核心运行原理
使用 Spring Boot 时 , 我们只需引|入对应的 Starters, Spring Boot 启动时便会自动加载相关依赖 , 配置相应的初始化参数 , 以最快捷、简单的形式对第三方软件进行集成 , 这便是 SpringBoot 的自动配置功能 。 我们先从整体上看一下 Spring Boot 实现该运作机制涉及的核心部分 , 如图 2-1 所示 。
文章插图
图 2-1 描述了 Spring Boot 自动配置功能运作过程中涉及的几个核心功能及其相互之间的关系包括@EnableAutoConfiguration、spring.factories、各组件对应的 AutoConfiguration 类、@Conditional 注解以及各种 Starters 。
可以用一句话来描述整个过程:Spring Boot 通过@EnableAutoConfiguration 注解开启自动配置 , 加载 spring.factories 中注册的各种 AutoConfiguration 类 , 当某个 AutoConfiguration类满足其注解@Conditional 指定的生效条件(Starters 提供的依赖、配置或 Spring 容器中是否存在某个 Bean 等)时 , 实例化该 AutoConfiguration 类中定义的 Bean(组件等) , 并注入 Spring 容器 , 就可以完成依赖框架的自动配置 。
我们先从概念及功能上了解一下图 2-1 所示部分的作用及相互关系 , 在后面章节中会针对每个功能及组件进行源代码级别的讲解 。
·@EnableAutoConfiguration:该注解由组合注解@SpringBootApplication 引入 , 完成自动配置开启 , 扫描各个jar包下的spring.factories文件 , 并加载文件中注册的AutoConfiguration类等 。
·spring.factories:配置文件 , 位于 jar 包的 META-INF 目录下 , 按照指定格式注册了自动配置的 AutoConfiguration 类 。 spring.factories 也可以包含其他类型待注册的类 。 该配置文件不仅存在于 Spring Boot 项目中 , 也可以存在于自定义的自动配置(或 Starter)项目中 。
·AutoConfiguration 类:自动配置类 , 代表了 Spring Boot 中一类以 XXAutoConfiguration命名的自动配置类 。 其中定义了三方组件集成 Spring 所需初始化的 Bean 和条件 。
·@Conditional:条件注解及其衍生注解 , 在 AutoConfiguration 类上使用 , 当满足该条件注解时才会实例化 AutoConfiguration 类 。
·Starters:三方组件的依赖及配置 , Spring Boot 已经预置的组件 。 Spring Boot 默认的Starters 项目往往只包含了一个 pom 依赖的项目 。 如果是自定义的 starter , 该项目还需包含 spring.factories 文件、AutoConfiguration 类和其他配置类 。
以上在概念层面介绍了 Spring Boot 自动配置的整体流程和基本运作原理 , 下面将会详细介绍这几个核心部分的组成结构及源代码 。
运作原理源码解析 Z@EnableAutoConfiguration@EnableAutoConfiguration 是开启自动配置的注解 , 在创建的 SpringBoot 项目中并不能直接看到此注解 , 它是由组合注解@SpringBootApplication 引入的 。 下面我们先来了解一下 入口类和@SpringBootApplication 注解的功能 , 然后再深入了解@EnableAutoConfiguration注解的构成与作用 。
入口类和@SpringBootApplication 注解
Spring Boot 项目创建完成会默认生成-个*Application 的入口类 。在默认情况下 , 无论是通过 IDEA 还是通过官方创建基于 Maven 的 Spring Boo 项目,入口类的命名规则都是artifactld+Application 。 通过该类的 main 方法即可启动 Spring Boot 项目 , 代码如下 。
推荐阅读
- 国家工业互联网标识解析二级节点(威海)上线
- 全新8核国产CPU深入探秘:马上能买到
- 多就是好吗?解析智能手机多摄发展困局
- 新基建下,系统集成商数字化建设及渠道管理深度解析
- 四个维度解析区域发展与治理
- 智媒视角看深圳用数据解析城市
- “联邦的战斗力量”再现,华硕Z490主板机动战士高达版解析
- 天翼云全国首个工业互联网平台二级解析节点上线
- 16G运存+256G内存,专业骁龙865旗舰,性价比深入人心
- 深入理解Netty编解码、粘包拆包、心跳机制