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

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


http://www.kler.cn/a/581991.html

相关文章:

  • 【Axure资料】110套优质可视化大屏模板+图表组件+科技感元件等
  • 【Javascript网页设计】个人简历网页案例
  • git报错:error: RPC failed; curl 16 Error in the HTTP2 framing layer
  • stm32week6
  • 华为OD机试-抢7游戏(Java 2024 D卷 100分)
  • ⭐算法OJ⭐经典题目分类索引(持续更新)
  • Tomcat+Servlet运行后出现404错误解决方案
  • 【华为OD机考真题】- 星际篮球争霸赛(Java)
  • 蓝桥杯 商品库存管理
  • 《Android应用性能优化全解析:常见问题与解决方案》
  • llamafactory 微调教程
  • 如何在Django中实现批量覆盖更新的示例
  • Oracle数据库深度优化实战指南:从SQL到架构的全维度调优
  • 蓝桥杯 k倍区间
  • 《深度解析DeepSeek-M8:量子经典融合,重塑计算能效格局》
  • 深度学习分词器char-level实战详解
  • BambuStudio学习笔记:MinAreaBoundigBox
  • AS_Path过滤器应用灵活配置示例
  • Nginx 缓存清理
  • Hugging Face的Transformers核心模块:Pipelines(参数说明,各种模型类型调用案例)