当前位置:首页 > 后端开发 > (转载)非常详细的SpringBoot-自动装配原理

(转载)非常详细的SpringBoot-自动装配原理

6个月前 (05-27)55

先看看SpringBoot的主配置类:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

里面有一个main方法运行了一个run()方法,在run方法中必须要传入一个被@SpringBootApplication注解的类。

@SpringBootApplication

SpringBoot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot就会运行这个类的main方法来启动SpringBoot项目。

那@SpringBootApplication注解到底是什么呢,点进去看看:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

发现@@SpringBootApplication是一个组合注解。

@SpringBootConfiguration

 

先看看@SpringBootConfiguration注解:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

这个注解很简单,表名该类是一个Spring的配置类。

再进去看看@Configuration:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

说明Spring的配置类也是Spring的一个组件。

@EnableAutoConfiguration

这个注解是开启自动配置的功能。

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

先看看@AutoConfigurationPackage注解:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

这个注解是自动配置包,主要是使用的@Import来给Spring容器中导入一个组件 ,这里导入的是Registrar.class。

来看下这个Registrar:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

就是通过这个方法获取扫描的包路径,可以debug看看:

在这行代码上打了一个断点:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

启动项目:

进入断点处:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

看看能否获取扫描的包路径:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

已经获取到了包路径:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

那那个metadata是什么呢:

可以看到是标注在@SpringBootApplication注解上的DemosbApplication,也就是我们的主配置类:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

说白了就是将主配置类(即@SpringBootApplication标注的类)的所在包及子包里面所有组件扫描加载到Spring容器。所以包名一定要注意。

现在包扫描路径获取到了,那具体加载哪些组件呢,看看下面这个注解。

@Import({AutoConfigurationImportSelector.class})

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

@Import注解就是给Spring容器中导入一些组件,这里传入了一个组件的选择器:AutoConfigurationImportSelector。

里面有一个selectImports方法,将所有需要导入的组件以全类名的方式返回;这些组件就会被添加到容器中。

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

debug运行看看:

会给容器中导入非常多的自动配置类(xxxAutoConfiguration);就是给容器中导入这个场景需要的所有组件,并配置好这些组件:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

有了自动配置类,免去了我们手动编写配置注入功能组件等的工作。

那他是如何获取到这些配置类的呢,看看上面这个方法:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

会从META-INF/spring.factories中获取资源,然后通过Properties加载资源:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠Spring Boot在启动的时候从类路径下的META-INF/spring.factories中获取EnableAutoConfiguration指定的值,将这些值作为自动配置类导入到容器中,自动配置类就生效,帮我们进行自动配置工作。以前我们需要自己配置的东西,自动配置类都帮我们完成了。

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

J2EE的整体整合解决方案和自动配置都在spring-boot-autoconfigure-2.0.3.RELEASE.jar:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

比如看看WebMvcAutoConfiguration:

都已经帮我们配置好了,我们不用再单独配置了:

(转载)非常详细的SpringBoot-自动装配原理 _ Java侠

转载: https://blog.csdn.net/Dongguabai/article/details/80865599

 

作者:loveCode'shy
来源链接:https://www.cnblogs.com/hhcode520/p/9450933.html

标签: Spring Boot

“(转载)非常详细的SpringBoot-自动装配原理” 的相关文章

使用IDEA搭建一个简单的SpringBoot项目——详细过程

使用IDEA搭建一个简单的SpringBoot项目——详细过程

一、创建项目 1.File->new->project; 2.选择“Spring Initializr”,点击next;(jdk1.8默认即可...

Springboot 优雅停止服务的几种方法

Springboot 优雅停止服务的几种方法

  在使用Springboot的时候,都要涉及到服务的停止和启动,当我们停止服务的时候,很多时候大家都是kill -9 直接把程序进程杀掉,这样程序不会执行优雅的关闭。而且一些没有执行完...

springboot整合netty(二)

springboot整合netty(二)

目录 前言 正文 代码 1. 新建一个springboot项目,在pom文...

SpringBoot读取配置文件,赋值给静态变量

SpringBoot读取配置文件,赋值给静态变量

SpringBoot读取配置文件,赋值给静态变量 1、配置文件 2、赋值静态变量—注意set函数的写法 @Component @...

SpringBoot简介

1.1、什么是SpringBoot? SpringBoot是一个开发基于Spring框架的应用的快速开发框架,它也是SpringCloud构建微服务分布式系统的基础设施...

实战SpringBoot集成JWT实现token验证

实战SpringBoot集成JWT实现token验证

本文为转载,详情见文末 JWT官网:https://jwt.io/ JWT(Java版)的github地址:https://github.com/jwtk...

SpringBoot使用PageHelper

1.引入依赖 <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -...

SpringBoot Mybatis开启事务

SpringBoot Mybatis开启事务

SpringBoot开启事务非常的简单,只需要一个注解@Transactional 就可以,因为默认已经对jpa、mybatis、jdbc开启了事务。 上一篇讲解了Sp...

史上最全的springboot导出pdf文件

史上最全的springboot导出pdf文件

  最近项目有一个导出报表文件的需求,我脑中闪过第一念头就是导出pdf(产品经理没有硬性规定导出excel还是pdf文件),于是赶紧上网查看相关的资料,直到踩了无数的坑把功能做出来了才知...

springboot项目main函数启动

springboot项目main函数启动

在controller包下新建appController类 package controller; import org.springfr...