Spring Boot配置(三)

外部配置加载顺序

spring boot 也可以从以下位置加载配置,优先级从高到低,高优先级会覆盖低优先级。所有的配置会形成互补配置。

Spring Boot配置(三)_第1张图片

自动配置原理

1、应用程序从主方法中开始启动,加载主配置类,开启了自动配置功能,通过@EnableAutoConfiguration实现。该注解的作用:

利用EnableAutoConfigurationImportSelection(选择器)给容器中导入一些组件。

可以插入selectImports()方法的内容。方法体如下所示:

Spring Boot配置(三)_第2张图片

2、configurations表示获取到的候选的配置。

Spring Boot配置(三)_第3张图片

LoadFactoryNames方法从类路径下得到一个资源,用于扫描所有jar包类路径下的META-INF/spring.factories。将扫描到的这些文件的内容包装成properties对象,从对象当中获取到EnableAutoConfiguration.class类(类名)的值,将每一个url获取的值加到返回的结果容器当中。

Spring Boot配置(三)_第4张图片

即将类路径下的META-INF/spring.factories中配置的所有EnableAutoConfiguration的值加入容器当中。是配置的开始。

每一个这样的***Configuration类都是容器的一个组件,都加到容器中以做自动配置。

3、每一个自动配置类进行自动配置功能。以HttpEncodingAutoConfiguration配置类(Http编码功能自动配置)为例,解释自动配置原理。

Spring Boot配置(三)_第5张图片

Spring Boot配置(三)_第6张图片

根据当前不同的条件判断,决定这个配置类是否生效。

一旦这个配置类生效,这个配置类就会给容器中添加各种组件,这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的。

4、所有在配置文件中能配置的属性都在****Properties类当中封装。配置文件能配置什么就可以参照某一个功能对应的这个属性类。

Spring Boot配置(三)_第7张图片

spring boot 的精髓

1、spring boot 启动时会加载大量的自动配置类。

2、我们看我们需要的功能有没有spring boot默认写好的自动配置类。

3、我们再看这个自动配置类中配置了那些组件。只要我们要用的组件有,就不需要再配置了。

4、给容器的自动配置类添加组件的时候,会从properties类中获取某些属性,我们就可以在这些配置类当中指定这些属性的值。

我们先看spring boot帮我们配置了什么。如果有,用它的,如果它的属性用的不满意,就在配置文件当中配置。

 

 

 

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