SpringBoot自动装配原理-创新互联

Spring Boot 是一个可以轻松创建独立的、生产级的基于 Spring 的应用程序的框架,Spring Boot 框架将 Spring、MyBatis、SpringMVC 中的一系列配置进行了简化,只需要使用最简单的配置和注解就能快速开发应用程序。通过官网提供的 Spring Initializr 插件可以快速生成 Spring Boot 应用。

网站设计制作过程拒绝使用模板建站;使用PHP+MYSQL原生开发可交付网站源代码;符合网站优化排名的后台管理系统;成都做网站、成都网站制作收费合理;免费进行网站备案等企业网站建设一条龙服务.我们是一家持续稳定运营了10多年的创新互联网站建设公司。

什么是自动装配
Spring Boot 相比于 Spring 的一个很大进步点在于不用再手动配置一系列配置文件,Spring Boot 提供了配置应用程序和框架所需要的基本配置,这就是自动配置。

Spring Boot 启动器
Spring Boot 中的一系列启动器是自动装配的最佳实践。比如当引入了一个 spring-boot-starter-web 依赖:

org.springframework.bootspring-boot-starter-web

Spring Boot 框架就会自动引入 web 环境所有的依赖,并且自动配置,Spring Boot 将所有的功能场景,都变成一个个启动器,想要用什么功能,只需要找到对应的启动器就可以了。

Spring Boot 的所有启动器可以在官网https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot.html#using-boot-starter中找到,下图是所有启动器中的一小部分:

在这里插入图片描述

自动装配原理分析

Spring Boot 的主程序也可以称为启动类,这是开启 Spring Boot 项目的入口。查看源代码推荐使用 IDEA。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringbootdemoApplication {public static void main(String[] args) {SpringApplication.run(SpringbootdemoApplication.class, args);
  }
}

@SpringBootApplication 注解标注这个类是一个 SpringBoot 的启动类,这个注解也是自动装配的核心。

在这里插入图片描述

@Target、Retention、Documented、Inherited 四个注解是标准的元注解,核心在于@SpringBootConfiguration和@EnableAutoConfiguration这两个注解。

通过继续进入注解内部,可以将@SpringBootConfiguration和@EnableAutoConfiguration这两个注解的结构表示出来:

@SpringBootConfiguration : Spring Boot 的配置
    @Configuration : Spring 配置类
        @Component : Spring 的组件
@EnableAutoConfiguration : 自动配置
    @AutoConfigurationPackage : 自动配置包
        @Import({Registrar.class}) : 自动配置包注册
        @Import({AutoConfigurationImportSelector.class}) : 导入选择器

@SpringBootConfiguration 声明了这个类为 SpringBoot 的组件,@EnableAutoConfiguration 是自动配置的核心,其中@AutoConfigurationPackage 对配置包册,AutoConfigurationImportSelector 类来进行自动装配。

继续来看看 AutoConfigurationImportSelector 这个类

在这里插入图片描述

  1. 引入环境。

  2. 引入 bean 加载器。

  3. 引入资源加载器。

  4. 配置导入。

继续向下看,selectImports 中 的getAutoConfigurationEntry 方法第 123 行代码将所有的配置通过 getCandidateConfigurations 方法放进一个 List 集合中

在这里插入图片描述

继续进入 getCandidateConfigurations 方法,这个配置获取的路径是 EnableAutoConfiguration.class,也就是@SpringBootApplication 所依赖的两个重要注解的其中一个。这段代码最终想表达的意思是将启动类下的所有配置都导入。

在这里插入图片描述

进入 LoadFactoryNames 或者就从 Assert.notEmpty 的信息中,可以发现这些配置来自于 META-INF/spring.factories 中,从 jar 包中可以查看到具体的目录结构

在这里插入图片描述
在 spring.factories 文件中存在大量 xxxAutoConfiguration,这个文件记录了所有 starter 的自动装配类,就是这些类在容器中导入了场景需要的所有组件;并通过 @Configuration 自动配置

在这里插入图片描述
通过一张图来总结一下自动装配的原理,通过上面对源码的分析,可以看出 SpringBoot 所有的自动配置都在启动类中被扫描和加载。所有的自动配置类都在 spring.properties 中。

在这里插入图片描述
自动装配总结起来可以分为以下几步:

  1. Spring Boot 在启动的时候,从类路径下/META-INF/spring.factories 获取指定的值;

  2. 将这些自动配置的类导入容器,自动配置就会生效,进行自动配置!

  3. 以前我们需要自动配置的东西,现在 Spring Boot 帮我们做了

  4. 自动配置的东西都在 spring-boot-autoconfigure.jar 这个包下

  5. 它会把所有需要导入的组件,以类名的方式返回,这些组件就会被添加到容器;

  6. 容器中也会存在非常多的 xxxAutoConfiguration
    的类(@Bean),就是这些类给容器中导入了这个场景需要的所有组件;并通过@Configuration 自动配置。

  7. 有了自动配置类,免去了我们手动编写配置文件的步骤。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


分享题目:SpringBoot自动装配原理-创新互联
文章源于:http://pwwzsj.com/article/djsgoc.html