Springboot自动装配分析

 一、首先创建一个简单的Springboot工程,并确保它能正常跑起来。我这边已经创建好一个


二、打开pom.xml文件,pom.xml主要分:1、父工程,parent标签,所有的核心依赖都在父工程中写明。2、springboot会把所有场景功能添加完毕,需要什么工程,只需要在dependence写starter启动器,就可以在工程中调用并使用。

 

相当于进入你创建的这个工程的“父”工程。 


3、打开后看到,其还有父工程,标题id是“Spring-boot-dependencies,是这个Springboot项目所有的依赖,点击进去

4、进来后可以看到如下内容

通过description可以了解到这是xml文件的主要作用是Springboot的依赖配置,下面的属性properties就是当前Springboot工程所依赖的所有jar包,上面有标注jar包的版本号

三、

1、打开Springboot工程的启动函数,可以看到上面有个@SpringBootApplication注解来标注这是springboot应用


2、进入这个注解

3、重点是这三个注解,按照注解的结构进行tab隔开,结构如下

#Springboot的配置文件 @SpringBootConfiguration #进入有一个Spring的Configuration注解 @Configuration #再进去有一个@Comonent注解说明其本质还是一个Spring @Component




@ComponentScan
#自动扫描目标包内的文件,加载到Springboot容器中
 

#重点是中间这个,开启自动配置文件
 1 #开启自动配置文件
 2 @EnableAutoConfiguration
 3     #其中的重要注解是AutoConfigurationPackage
 4     @AutoConfigurationPackage
 5         #导入选择器
 6         @Import(AutoConfigurationPackages.Registrar.class)
 7             #进入AutoConfigurationPackages这个类看看导入哪些选包
 8             
 9             #进入Registrar.class这个类看看导入哪些注册器
10                 ImportBeanDefinitionRegistrar//一些定义和已经注册的bean
11                 metaData//注解元数据,注册元数据,导入元数据
12     #导入选择器,这个跟AutoConfigurationPackage是同级的
13     @Import(AutoConfigurationImportSelector.class)
14         #加载元数据
15         selectImports//这个方法加载元数据
16             #加载自动配置
17             getAutoConfigurationEntry//这个方法获取加载自动配置的入口
18                 #getAutoConfigurationEntry方法中有一个getCandidateConfigurations函数获取所有候选配置
19                 getCandidateConfigurations()
20                     #里面主要有三项
21                     #第一项获取所有的配置文件,new ArrayList的参数SpringFactoriesLoader函数的参数有两个加载器
22                         #loadFactoryNames
23                         loadFactoryNames//获取一个SpringFacotryName,会从这个函数中加载spring.factories配置文件,这个函数里面有下面两个参数
24                                 #进入loadFactoryNames,loadSpringFactories在这个函数里面会把所有配置加载到一个properties变量里面
25                             getBeanClassLoader//BeanClass的加载器
26                             #getSpringFactoriesLoaderFactoryClass
27                             getSpringFactoriesLoaderFactoryClass//返回一个类,意思是所有标有@EnableAutoConfiguration的类都会自动装配
28                     #第二项:导入所有候选的加载器
29                     ImportCandidates.load(AutoConfiguration.class, getBeanClassLoader()).forEach(configurations::add);
30                     #第三项:导入Springboot自动装配的核心文件,spring.factories,这个配置文件在在spring-boot-autoconfiguration包里面
31                     Assert.notEmpty()
为了展示完整清晰的结构,我制作了一个图片来作为补充。

 

 

posted @ 2022-05-30 00:38  心诺止水  阅读(68)  评论(0编辑  收藏  举报