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

SpringBoot自动装配流程

SpringBoot自动装配原理

  • Spring和SpringBoot的关系和区别
  • SpringBoot的核心注解
    • @SpringBootApplication注解:
  • SpringBoot自动配置原理
    • 自己理解的:
    • 网上统一概述的:

Spring和SpringBoot的关系和区别

SpringBoot是Spring生态中的产品
Spring是一个容器框架
SpringBoot不是一个框架、他是一个可以快速架构,基于Spring的脚手架(里面包含了Spring和各种框架,为开发Spring生态其他框架铺平道路)

SpringBoot的核心注解

@SpringBootApplication注解:

这个注解标识了一个SpringBoot工程,它实际上是另外三个注解的组合,这三个注解分别是:

  1. @SpringBootConfiguration:这个注解实际就是一个@Configuration,标记当前类是个配置类;
  2. @EnableAutoConfiguration:向Spring容器中导入了一个Selector,用来加载类路径下 Spring容器中所定义的自动配置类,将这些类加载为配置Bean;
  3. @Conditional也很关键,如果没有它我们无法在自定义应用中进行定制开发:
    • @ConditionalOnBean
    • @ConditionalOnClass
    • @ConditionalOnExpression
    • @ConditionalOnMissingBean
    • 。。。 。。。 。。。

其它例如 @Configuration、@Bean、@Import 。这些在SpringBoot中较为常见的注解 其实是Spring提供的,并不属于SpringBoot注解

SpringBoot自动配置原理

自己理解的:

  1. 通过类中的@SpringBootApplication注解(该注解是个组合注解 同时标注该类是启动类)
  2. @SpringBootApplication组合注解中的@EnableAutoConfiguration注解,通过@Import引入了AutoConfigurationImportSelector服务,该服务实现了DeferredImportSelector(延迟导入),去导入一些Bean组件(通过重写ImportSelector服务中的selectImports方法是实现 具体步骤如下
    (1)(具体实现是:selectImports方法中调用了getAutoConfigurationEntry方法,在该方法中,会通过getCandidateConfigurations方法通过SpringFactoriesLoader中的loadFactoryNames方法调用loadSpringFactories 获取所有的候选配置类(所有 META-INF/spring.factories路径下的所有文件找出来,然后根据EnableAutoConfiguration的完整类路径初筛一遍(loadFactoryNames方法入参时一步一步带入进来的筛选路径))))
    (2)selectImports方法中调用了getAutoConfigurationEntry方法,在该方法中通过getCandidateConfigurations方法获取完初次筛选后的配置类后再通过getConfigurationClassFilter().filter()筛选有效启动的自动配置类(根据@ConditionalOnBean、@ConditionalOnClass等注解排除无效的自动配置类)

网上统一概述的:

  1. 通过@SpringBootApplication引入@EnableAutoConfiguration(负责启动自动配置功能)
  2. 通过@EnableAutoConfiguration引入@Import
  3. Spring容器启动是,加载IOC容器会解析@import注解
  4. @Import导入了一个DeferredImportSelector(在解析配置类时只是将其加入到一个容器中,等到所有的配置类都解析完成后才会处理DeferredImportSelector。它会使SpringBoot的自动配置类顺序排在最后,这样方便我们扩展和覆盖)
  5. 然后读取所有的/META-INF/spring.factorles文件(SPI)
  6. 过滤出所有AutoConfigurtionClass类型的类
  7. 最后通过@ConditionalOn*** 排除无效的自动配置类

http://www.mrgr.cn/news/64733.html

相关文章:

  • pyinstaller 打包二进制 spec 文件解析
  • 鸿蒙开启无线调试
  • 【WebRTC】WebRTC的简单使用
  • leetcode224:基本计算器
  • 开源呼叫中心系统 FreeIPCC:WebRTC 详解
  • Servlet和JSP入门详解
  • 存储和读写方案
  • 讲讲RabbitMQ 性能优化
  • 清华双臂机器人扩散大模型RDT:先预训练后微调,支持语言、图像、动作多种输入
  • 动态规划-两个数组的dp问题——1143.最长公共子序列
  • Java 中的 堆栈(Stack)
  • 海滨学院班级记忆档案:设计与技术实现
  • 单例模式四种写法
  • C#/.NET/.NET Core学习路线集合,学习不迷路!
  • 使用贪心策略求解糖果罐调整次数
  • Foods
  • 三层交换实现不同VLAN之间设备的互通
  • js中多let与var
  • 【016C】基于51单片机电子秤(LCD1602显示)
  • SpringBoot框架下:构建专业在线试题库
  • 找不到msvcp120.dll,无法继续执行代码的五种解决方法一步一步指南
  • 数据结构与算法——Java实现 52.力扣98题——验证二叉搜索树
  • spring-boot(thymeleaf前端框架,简单了解)、( 跨域请求)
  • 【LwIP源码学习5】网口接收数据处理过程
  • 数据挖掘(七)
  • 【设计模式系列】总览