请你谈谈SpringFactoriesLoader详解、SpringBoot自动配置原理解析

1SpringFactoriesLoader详解

SpringFactoriesLoader 工厂加载机制是 Spring 内部提供的一个约定俗成的加载方式,与 java spi 类似,只需要在模块的 META-INF/spring.factories 文件中,以 Properties 类型(即 key-value 形式)配置,就可以将相应的实现类注入 Spirng 容器中。Properties 类型格式:
key:是全限定名(抽象类|接口)
value:是实现,多个实现通过 逗号 进行分隔。

loadFactoryNames
读取 classpath上 所有的 jar 包中的所有 META-INF/spring.factories属性文件,找出其中定义的匹配类型 factoryClass 的工厂类,然后并返回这些工厂类的名字列表,注意是包含包名的全限定名。
在这里插入图片描述
首先从classpath下每个jar包下搜寻文件名是META-INF/spring.factories的配置文件,然后将解析properties文件,找到指定名称的配置后返回,需要注意的是,这里不仅仅是在classpath路径下查找,会扫描所有路径下的jar包,只不过这个文件只会在classpath下的jar包中。

// 来⾃ org.springframework.boot.autoconfigure下的META-INF/spring.factories
//EnableAutoConfiguration后文会讲到,它用于开启Spring Boot自动配置功能
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\

执行loadFactoryNames((EnableAutoConfiguration.class,classLoader)后,得到对应的一组@Configuration类,我们就可以通过反射实例化这些类,然后注入到IOC容器中,最后容器里就有了一系列标注了@Cofiguration的JavaConfig形式的配置类。

2SpringBoot自动配置原理解析

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
然后就是实例化这些配置类注册到IOC容器中。流程如下:
在这里插入图片描述

通过上面的方式,所有的自动配置类都被导进主配置类中,但是这么多的配置类,明显有很多我们平常是没有使用到的,没必要全部生效,下面我们以DataSourceAutoConfiguration配置类为例来看一下自动配置类是如何工作的:

在这里插入图片描述
DataSourceProperties 类
在这里插入图片描述

  • SpringBoot启动时会扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包。
  • 根据spring.factories配置加载EnableAutoConfiguration
    其中给容器中自动配置添加组件的时候,会从propeties类中获取配置文件中指定这些属性的值。xxxAutoConfiguration:⾃动配置类给容器中添加组件。xxxProperties:封装配置⽂件中相关属性。
  • 根据@Conditional注解的条件,进行自动配置并将Bean注入Spring容器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值