springBoot是如何实现自动装配的

目录

1 什么是自动装配

2 Spring自动装配原理

 2.1 @SpringBootConfiguration

​编辑 2.2 @EnableAutoConfiguration

 2.2.1 @AutoConfigurationPackage

2.2.2  @Import({AutoConfigurationImportSelector.class})

 2.3 @ComponentScan


1 什么是自动装配

        自动装配就是将官方写好的的配置类加载到spring容器,然后根据配置类生成一些项目所需要的bean对象。(对于springBoot来讲,就是从spring.factories文件获取到对应需要进行自动装配的类,并生成相应的bean对象交给spring管理。)

2 Spring自动装配原理

要想搞明白spring自动装配的原理,就需要从我们springBoot上启动类的注解入手。

springBoot是如何实现自动装配的_第1张图片

@SpringBootApplication 

该注解是springBoot启动类的一个注解,是一个组合注解,主要作用就是说明这个类是springBoot的主配置类。该注解主要由三个注解组成

@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan

springBoot是如何实现自动装配的_第2张图片

 2.1 @SpringBootConfiguration

这个注解包含了@Configuration,@Configuration里面又包含了一个@Component,也就是说这个注解标记在哪个类上,那么这个类就是spring的配置类。

springBoot是如何实现自动装配的_第3张图片

springBoot是如何实现自动装配的_第4张图片 2.2 @EnableAutoConfiguration

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

springBoot是如何实现自动装配的_第5张图片

 2.2.1 @AutoConfigurationPackage

这个注解的作用就是将主配置类(就是有SpringBootApplication标注的类)的所在包以及子包里面的所有容器扫描并加载到spring容器里面,这也就是为什么平时在springboot开发时,我们缩写的controller层和service路径都与朱配置类同级或者次级的原因。

springBoot是如何实现自动装配的_第6张图片

2.2.2  @Import({AutoConfigurationImportSelector.class})

上个注解是将所有的组件都加载到了容器里面,那这个注解就是将所有需要自动装配的类以全类名的形式返回,那么接下里我们就来说一说哪些是需要自动装配的类。

1.AutoConfigurationImportSelector类中有一个selectImports()方法,该方法又调用了getAutoConfigurationEntry这个方法,如下:

springBoot是如何实现自动装配的_第7张图片

 2 getAutoConfigurationEntry()方法中又调用了getCandidateConfigurations()这个方法

springBoot是如何实现自动装配的_第8张图片

 3 在getCandidateConfigurations()方法中又调用了loadFactoryNames()方法

 4 在loadFactoryNames()方法中又调用了loadSpringFactories()方法

 5 在loadSpringFactories() 方法中加载了META-INF目录下的spring.factories文件

springBoot是如何实现自动装配的_第9张图片

 6 在META-INF/spring.factories这个文件里面的数据是以键=值的方式存储,然后解析这些文件springBoot是如何实现自动装配的_第10张图片

springBoot是如何实现自动装配的_第11张图片

 2.3 @ComponentScan

这个注解的作用就是扫描当前包及子包的注解

你可能感兴趣的:(spring,boot,spring,java)