赞
踩
学过SpringBoot 的小伙伴们都知道,当我们使用IDEA工具创建SpringBoot 项目的时候,在项目中会生成一个全局的配置文件application.properties
或application.yml
,我们各种属性设置都在这个文件中去配置。
端口号(server.port)等等一系列的配置,那们当我们启动SpringBoot 项目这些配置就都生效了,那是这么做到的呢?接下来我们来聊聊SpringBoot 的自动配置原理。
@SpringBootApplication 标注在某个类上说明
该注解定义如下:
可以看到 SpringBootApplication
注解是一个组合注解,主要是由元注解(@Target,@Retention,@Documented,@Inherited)和三个注解:
@SpringBootConfiguration
:该注解表示这是一个 SpringBoot 的配置类。@ComponentScan
:开启组件扫描。@EnableAutoConfiguration
:翻译过来的意思是开启自动配置,重点就在这个配置当中该注解定义如下:
@AutoConfigurationPackage 注解,将主配置类的所在包及下面所有子包里面的所有组件扫描加载到string容器中。
@Import({AutoConfigurationImportSelector.class}),该注解给当前配置类导入自动配置类,其导入的AutoConfigurationImportSelector类中的selectImports()方法,通过SpringFactoriesLoader.loadFactoryNames()扫描所有具有META-INF/spring.factories的jar包,然后返回需要导入的组件的全类名。
META-INF/spring.factories(2.7.0版本之前)
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
(2.7.10版本)
我们来看一下
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
这类文件,这个文件是以Map 形式存放的。key是EnableAutoConfiguration类的全类名,
value是一个xxxxAutoConfiguration的类名的列表。可以看到 EnableAutoConfiguration 下面有很多类,这些就是我们项目启动时进行自动配置的类。
总结就是将类路径下
META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
里面配置的所有 EnableAutoConfiguration 的值加入到 Spring 容器中。
下面我么就以HttpEncodingAutoConfiguration(Http编码自动配置)为例说明自动配置原理;
该注解如下:
ServerProperties通过 @ConfigurationProperties 注解将配置文件与自身属性绑定。 |
对于@ConfigurationProperties注解小伙伴们应该知道吧,我们如何获取全局配置文件的属性中用到,它的作用就是把全局配置文件中的值绑定到实体类JavaBean上面(将配置文件中的值与ServerProperites绑定起来),而@EnableConfigurationProperties主要是把以绑定值JavaBean加入到spring容器中。到这里,我们在application.properties 声明spring.application.name 是通过@ConfigurationProperties注解,绑定到对应的XxxxProperties配置实体类上,然后再通过@EnableConfigurationProperties注解导入到Spring容器中.
AutoConfiguration:表示自动配置类 |
Properties:表示封装配置文件中相关属性 |
Spring Boot启动的时候会通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载,通过@ConfigurationProperties注解把全局配置文件中的值绑定到实体类JavaBean上面,再通过@EnableConfigurationProperties注解把绑定的JavaBean 注入到Spring容器当中。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。