第四章 :springBoot自动配置原理,加载过程

第四章 :springBoot自动配置原理,加载过程第四章 :springBoot自动配置原理,加载过程

大家好,又见面了,我是你们的朋友全栈君。

1,springboot启动时加载住配置类,开启了自动配置功能

点开程序启动要走的第一个注解:

第四章 :springBoot自动配置原理,加载过程

可以看到:

第四章 :springBoot自动配置原理,加载过程

有个:

@EnableAutoConfiguration

这个注解的作用:利用:

@AutoConfigurationImportSelector(扫描器)给容器中导入一些组件,有那些组件呢?

可以把上面的注解一级一级点进去,在AutoConfigurationImportSelector的类中有个下面的方法:

第四章 :springBoot自动配置原理,加载过程

 

关注这行代码:

List<String> configurations = this.getCandidateConfigurations(annotationMetadata, attributes);

这是获取候选的配置。点击去这个方法,可以看到下面这行代码:

List<String> configurations = SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());

接着点进去:

第四章 :springBoot自动配置原理,加载过程

这里的:

Enumeration<URL> urls = classLoader != null ? classLoader.getResources("META-INF/spring.factories") : ClassLoader.getSystemResources("META-INF/spring.factories");

扫描所以jar包类路径下的

spring.factories文件

把扫描到的这些文件的内容包装成properties对象

从properties中获取到EnableAutoConfiguration.class类对应的值,然后吧他们加到容器中。

 

总之,将类路径 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到容器中,

spring-boot给我们自动加载的组件都在下面这个jar包中:

第四章 :springBoot自动配置原理,加载过程

这些

autoconfigure都会在启动时加入到容器中供我们使用。

 


二,以

HttpEncodingAutoConfiguration 类为例,说明自动配置

ctrl+n打开

HttpEncodingAutoConfiguration类:

可以看到如下注解:

@Configuration  //表示这是个配置类,
@EnableConfigurationProperties({HttpProperties.class}) //启动z指定的类。将配置文件中的值和HttpProperties的属性映射起来
@ConditionalOnWebApplication(
    type = Type.SERVLET
)  //spring底层@Condition注解,根据不同的条件,如果满足指定的条件,整个配置类里面的配置就会生效,//判断是不是web应用
@ConditionalOnClass({CharacterEncodingFilter.class}) //也是个判断型注解,判断当前项目有没有这个类  、、CharacterEncodingFilter:springmvc中乱码过滤器
@ConditionalOnProperty(
    prefix = "spring.http.encoding",
    value = {"enabled"},
    matchIfMissing = true
)//判断型,判断配置文件是否存在某一个配置
public class HttpEncodingAutoConfiguration {
  
  

在上面第二行,点开

HttpProperties.class这个类,可以看到:

@ConfigurationProperties( prefix = "spring.http")//从配置文件中获取指定的的值和bean属性,进行绑定
public class HttpProperties {
  
  

所有在配置文件中能配置的属性都在**.properties中封装着。配置文件能配置什么就可以参照某个功能对应的这个属性类。

 

总结:

1,springboot启动会加载大量的自动配置类

2,我们看我们需要的功能有没有springboot默认写好的自动配置类‘

3,我们再来看这个自动配置类中到底配置了那些组件;(只要我们要用的组件有,我们就不需要再来配置了)

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

5,自动配置中有很多判断,只有判断返回true才能该容器添加组件,里面的内容才能生效

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/105998.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式

    java生成pfx_JAVA代码-数字证书公私钥生成-公钥cer ,私钥jks, pfx格式importjava.io.File;importjava.io.FileInputStream;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.math.BigInteger;importjava.security.InvalidKeyException;im…

    2022年5月29日
    52
  • 数据库概念设计与逻辑设计[通俗易懂]

    数据库概念设计与逻辑设计[通俗易懂]一、概念设计概念设计的目的就是为了建立概念数据模型,概念数据模型也称为高级数据模型,之所以称为高级数据模型是因为它更接近于人的思维,而不是机器的思维,相比于关系模型更容易理解,此处的高级和低级的概念,与程序语言领域的高低级是一样的。我们通常称Java语言为高级语言,汇编语言为低级语言,是因为高级语言对于我们而言要比汇编语言更容易理解。关于概念数据模型,我们一般都会采用E-R图进行描述。E-R图的规则如下:1.实体采用矩形框,联系采用菱形框,属性采用椭圆形框。2.实体、联系、属性必须使用文字描

    2022年10月9日
    3
  • ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题「建议收藏」

    ThreadPool.QueueUserWorkItem引发的血案,线程池异步非正确姿势导致程序闪退的问题「建议收藏」ThreadPool是.net System.Threading命名空间下的线程池对象。使用QueueUserWorkItem实现对异步委托的先进先出有序的回调。如果在回调的方法里面发生异常

    2022年7月1日
    48
  • matlab激光雷达三角测距,三角测距激光雷达原理[通俗易懂]

    matlab激光雷达三角测距,三角测距激光雷达原理[通俗易懂]激光雷达近几年越来越普及了,复杂的比如应用在无人驾驶汽车上,简单的比如用在扫地机上去。随着无人驾驶和服务机器人行业的发展,后续激光雷达的应用会更广泛。激光雷达之所以流行,主要是因为它能够精准的测距,那么它是如何实现这样的测距功能的呢?主流的激光雷达主要是基于两种原理的,一种是三角测距法,一种是飞行时间(TOF)法。听名字可不要觉得很复杂,其实只需要高中知识,任何人都能看懂它的测距原理!今天咱们就先…

    2022年6月2日
    42
  • the jdbc driver has been_the tomcat connector configured

    the jdbc driver has been_the tomcat connector configured使用JDBC连接MySql时出现:Theservertimezonevalue’�й���׼ʱ��’isunrecognizedorrepresentsmorethanonetimezone.YoumustconfigureeithertheserverorJDBCdriver(viatheserverTimezoneconfiguration…

    2022年8月30日
    2
  • ubuntu安装中文输入法搜狗_ubuntu切换中文输入法快捷键

    ubuntu安装中文输入法搜狗_ubuntu切换中文输入法快捷键Ubuntu安装中文输入法

    2022年9月26日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号