散装java 散装java
首页
  • Java基础
  • JVM
  • Java多线程
  • 知识点
  • 案例
  • Redis
  • RabbitMQ
  • Kafka
  • Elasticsearch
  • MySQL
  • Linux
  • Docker
  • Zookeeper
  • Nginx
  • Git
  • JMeter
  • Gradle
  • 常见BUG
  • 常见解决方案
  • 资源
  • 问答
💖支持
Gitee (opens new window)
首页
  • Java基础
  • JVM
  • Java多线程
  • 知识点
  • 案例
  • Redis
  • RabbitMQ
  • Kafka
  • Elasticsearch
  • MySQL
  • Linux
  • Docker
  • Zookeeper
  • Nginx
  • Git
  • JMeter
  • Gradle
  • 常见BUG
  • 常见解决方案
  • 资源
  • 问答
💖支持
Gitee (opens new window)
  • Spring Framework

    • Spring Framework 源码拉取编译技巧
  • Spring知识点

    • Spring 导读
    • Spring 过滤器和拦截器的区别
    • Spring Boot 自动装配原理是如何实现的
      • 什么是自动装配?
      • Spring Boot 自动装配的原理是什么样的?
  • Spring集成

  • 案例

    • 大文件上传-分片-秒传-断点续传
    • 布隆过滤器使用
    • Spring Boot 集成 Zookeeper 实现分布式锁
    • Spring Boot 集成 Redis 实现分布式锁
    • Spring Boot 集成 MySQL 实现分布式锁
  • Spring
  • Spring知识点
散装java
2022-12-05
目录

Spring Boot 自动装配原理是如何实现的

# 什么是自动装配?

自动装配是 Spring Boot 的核心,一般提到自动装配就会和 Spring Boot 联系在一起。实际上 Spring Framework 早就实现了这个功能。Spring Boot 只是在其基础上,通过 SPI 的方式,做了进一步优化。

Spring Boot 定义了一套接口规范,这套规范规定:Spring Boot 在启动时会扫描外部引用 jar 包中的META-INF/spring.factories 文件,将文件中配置的类型信息加载到 Spring 容器,并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 Spring Boot 定义的标准,就能将自己的功能装置进 Spring Boot。

其实一个最好的体现就是 starter ,比如你想要在项目中使用 redis 的话,直接在项目中引入对应的 starter 即可。

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
1
2
3
4

引入 starter 之后,我们通过少量注解和一些简单的配置就能使用第三方组件提供的功能了。

所以可以简单的理解:Spring Boot 的自动配置 就是为了帮助我们最快、最简单的去使用组件

# Spring Boot 自动装配的原理是什么样的?

这里我们基于 Spring Boot 2.7.2 的版本来说明一下

启动类的@SpringBootApplication注解由@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan三个注解组成,三个注解共同完成自动装配;

这三个注解的作用如下:

  • @SpringBootConfiguration 注解标记启动类为配置类
  • @ComponentScan 注解实现启动时扫描启动类所在的包以及子包下所有标记为 bean 的类由 IOC 容器注册为 bean
  • @EnableAutoConfiguration通过 @Import 注解导入 AutoConfigurationImportSelector 类,然后通过AutoConfigurationImportSelector类的 selectImports 方法去读取需要被自动装配的组件依赖下的spring.factories文件配置的组件的类全名,并按照一定的规则过滤掉不符合要求的组件的类全名,将剩余读取到的各个组件的类全名集合返回给 IOC 容器并将这些组件注册为 bean
上次更新: 2023/01/16, 18:12:53
Spring 过滤器和拦截器的区别
大文件上传-分片-秒传-断点续传

← Spring 过滤器和拦截器的区别 大文件上传-分片-秒传-断点续传→

Theme by Vdoing | Copyright © 2022-2024 散装java | MIT License | 鲁ICP备2022022143号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式