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

Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理

目的:从底层源码角度分析 Spring Boot 配置类以及自动装载的底层原理

文章目录

      • 1. Spring Boot 配置类实现自动装载
        • 1.1 @Configuration注解
        • 1.2 @Configuration 注解完成 bean 注入流程图
        • 1.3 @ConfigurationProperties注解赋值
      • 2. Spring Boot的核心机制:自动装配
        • 2.1 @SpringBootConfiguration注解
        • 2.2 @EnableAutoConfiguration注解
        • 2.3 @ComponentScan 注解
        • 2.4 总结

1. Spring Boot 配置类实现自动装载

在讲 spring 时,spring.xml 中配置的 bean:在进行依赖注入时,通过 ref 属性来进行,也就是手动装载;然后就是自动装载(2种);然后又讲到没有配置文件是怎么装载(通过 @Autowired注解);

这里再来说一个没有配置文件怎么装载(也就是 spring boot 中是如何进行依赖注入的)。

1.1 @Configuration注解

Spring Boot 已经去掉了 XML 文件,那么在 Spring Boot 中是如何进行 bean 依赖注入呢?----> 在 Spring Boot 中,通过配置类的方式来完成 bean 的依赖注入。配置类顾名思义就是专门写一个 Java 类用来做配置,以取代 XML 配置文件的方式,这里的配置类不需要继承任何类,也不需要实现任何接口,只需要在类定义处添加 @Configuration 注解即可。接下来我们通过配置类的形式完成Account 对象的注入。

1、创建配置类 BeanConfiguration,在类定义处添加 @Configuration 注解,同时定义一个返回值为 Account 的方法,并在方法定义处添加 @Bean 注解,代码如下所示。

在这里插入图片描述

配置类可以把它比作 XML 文件:类就等同于 XML 文件本身,类中添加了 @Bean 注解的方法就等同于 XML 文件中的 bean 标签,方法返回的对象就是要注入到容器中的 bean。

2、测试:

在这里插入图片描述
发现: 成功从容器中取出了 account 对象,这里是通过 beanName 取值的,所以可以得出结论,当前的 Account 对象 beanName 为 account,我们并没有手动设置 beanName,所以这个 beanName 取的是默认值,那么这里的默认值是如何设置的呢? 并非是取返回值类名首字母小写,而是方法名

1.2 @Configuration 注解完成 bean 注入流程图

1、启动 ApplicationContext 的时候传入配置类。

2、判断配置类是否添加了 @Configuration 注解,如果没有添加则不做处理,如果添加了则解析该配置类。

3、遍历配置类的所有方法,判断这些方法是否添加了 @Bean 注解,如果没有添加则不做处理,如果添加了则说明该方法的返回值就是需要注入的 bean。

4、通过反射机制执行该方法,获得返回值,同时获取方法名。

5、将方法名和返回值以 key-value 的形式存入容器中,供开发者调用。

流程图如下:

在这里插入图片描述

1.3 @ConfigurationProperties注解赋值

该注解的作用是在 Spring Boot 项目中直接读取 application.yml 配置文件中的数据并赋值给 bean 中的成员变量。

1、创建一个实体类,添加 @ConfigurationProperties 注解, 并通过 p

相关文章:

  • 知乎后台管理系统:数据库系统原理实验2——逻辑模型设计
  • 《断舍离》:给生活做减法,给灵魂做加法
  • k8s面试题总结(十四)
  • 微软PIKE-RAG:多层次多粒度体系化智能化的知识库构建方案
  • 【leetcode hot 100 138】随机链表的复制
  • 如何下载一些网上只提供了预览的pdf
  • 架构学习第八周--Kubernetes博客搭建
  • 【高德地图开发】鼠标框选点标记,并获取标记信息
  • Python Web应用开发之Flask框架——高级应用(一)
  • 八、排序算法
  • Git基本概念及使用
  • 搜广推校招面经四十四
  • 嵌入式音视频通话SDK组件EasyRTC:全平台设备兼容,智能硬件里的WebRTC调用实践
  • python ---cad二次开发(环境搭建)
  • 【OpenGL】01-配置环境
  • element tree树形结构默认展开全部
  • 韩国 KAIST激光雷达领域研究概况2025.3.12
  • 大模型微调中warmup(学习率预热)是什么
  • MATLAB 控制系统设计与仿真 - 24
  • 【技海登峰】Kafka漫谈系列(五)Java客户端之生产者Producer核心组件与实现原理剖析
  • 86岁书画家、美术教育家、吴昌硕嫡裔曾孙吴民先离世
  • 黄道炫:南京102天——黄镇球的防空日记
  • 韩国总统选举民调:共同民主党前党首李在明支持率超46%
  • 金正恩视察重要坦克厂并强调更迭陆军装备
  • 五年来首次!香港金管局斥资465.39亿港元购买美元
  • AI世界的年轻人|与总书记交流过的“00后”,渴望紧握时代赋予的接力棒