SpringBoot自动配置原理

SpringBoot

1:起步依赖

SpringBoot通过提供众多起步依赖降低项目依赖的复杂度,起步依赖本质上是一个Maven项目对象模型,定义了对其他库的 传递依赖,这些东西加在一起支持了某项功能。例如,SpringBoot中的传递依赖往往定义了统一的版本号,和SpringBoot版本紧紧相连,再也不用担心版本冲突。我们只要引入了起步依赖,就相当于导入了起步依赖中自动配置的jar包。

2:自动配置原理

在SpringBoot启动类中,通过启动类的@SpringBootApplication注解实现了Bean的自动注入,其自动配置的核心注解是:@EnableAutoConfiguration,点进去之后,其内部是根据@Import(AutoConfigurationImportSelector.class)这个注解来引入自动配置导入选择器的字节码文件,

进入这个AutoConfigurationImportSelector,我们主要看getAutoConfigurationEntry()这个方法,SpringBoot自动配置原理

通过元数据获取属性,然后再通过元数据和属性获取META-INF下spring.factories中所有的配置找到对应的配置文件类,然后把这个配置文件类注入到IOC容器中。
SpringBoot自动配置原理

SpringBoot自动配置原理

3:注解介绍

@import注解:被@Import注解注解引入的类会自动加载到spring容器中
@import注解4中用法
(1)直接加载对象,被加载的对象会被加载到spring容器中`
(2)加载配置类.被加载的配置类对象会将该配置类中所有带有@Bean注解的对象注入到spring容器中
(3)加载ImportSelector接口的实现类对象(被加载的实现类对象中注入的配置类字节码或者对象字节码将会被注入到spring容器中)springboot自动配置默认就是使用@import注解导入ImportSelector接口的实现类中的方法,将配置类对象加载到spring容器中
(4)加载ImportDefa…Registe接口的实现类对象,将配置类对象注入到该实现类中,使用@Import注解导入该实现类对象即可

@Condition注解:使用@Condition注解进行条件判断,一般此注解加载类上和方法上,此注解和@Bean注解一起使用的话,执行流程:先满足此注解对应的条件,才能将对象注入spring容器中

@ConfigurationProperties(proper=“指定配置文件中对象”),在实体类上加上此注解,可以将实体类属性和配置文件对象中属性名一致的属性做绑定,配置文件属性赋值,实体类属性自动映射赋值

@EnableConfigurationProperties(指定和配置文件绑定的实体类,并且将此实体类注入到spring容器中)