springboot-01-自动装配

springboot

1:自动配置原理

出发:image-20200701200914847

@SpringBootApplication注解:是springboot的核心注解

进入可以得到

image-20200701201029087

可以看到:其具有以下两个注解

  • @SpringBootConfiguration //表示这是springboot的一个参数
    @EnableAutoConfiguration //开启自动配置功能
    

对于@SpringBootConfiguration注解,展开来看:

image-20200701201606719

其中要关注以下两点:

@Import(AutoConfigurationImportSelector.class)
@AutoConfigurationPackage //翻译为自动配置包

@Import(AutoConfigurationImportSelector.class):其进行了一个导入,导入的功能就起着关键的作用,可以看到,它实际上导入了一个类——自动配置导入选择器,那么我们可以接着去看这个选择器究竟是个啥,起了啥作用。

可以看到,在这个类中具有这样一个方法,选择导入(哪些配置文件),顾名思义,这个方法可以获得我们的项目需要哪些配置文件,可以看到其又调用了一个称为自动获取所需要的配置文件(getAutoConfigurationEntry())方法image-20200701203446160

image-20200701203159105

顾名思义,通过这个函数就可以取出当前我们的项目所需要调用到哪些具体配置,通过debug可以看到,我的这个项目当前需要调用到以下的配置文件

image-20200701203139791

那么,我们便会去想,这个方法是如何去获取这些配置文件的呢,从图中可以看到,在getCandidateConfigurations()这个方法执行后,我们所需要得到的配置文件列表大致就获得了,进入这个获取候选配置的方法,再进入loadFactoryNames方法

image-20200701204019671

image-20200701204249671

可以看到其中有一个称为加载spring 工厂的方法,可以见名知意,说明通过这个方法我们可以获得配置名称,进入这个方法

image-20200701204549547

可以看到,其实际工作的原理就类似于迭代器的遍历方法,我们要关注的是,其是从哪里取的数据urls来用于比对的

image-20200701204841469

点开,发现是

image-20200701204930369

这下就全部明了了,总的来说就是从这里取出配置文件的所有数据,来与我们传入的所需配置文件进行对比,进而来判断哪些配置是我们需要的。

image-20200701205407178

选择回到之前,我们还差一个@AutoConfigurationPackage没有提到,这个注解实际上就说明了我们的spring会自动将获取包的路径,进入这个注解:

image-20200701210117964

可以看到其主要功能是基于导入的这个类实现的,再进入这个Registrar类

image-20200701210354407

其具有两个方法,我们需要关注的是一个方法,这是一个自动注册配置包的方法,我们需要关注第二个参数,也就是如何获取我们所需要注册的包名。

image-20200701210753452

image-20200701210947995

可以看到,通过这个方法可以获取当前main方法所在的包的目录

原文地址:https://www.cnblogs.com/wangmaomaofan/p/13221773.html