spring.factories在Spring Boot中的作用

一、引言

Spring Boot的自动装配的本质是从META-INF/spring.factories文件中获取到对应的需要进行自动装配的类,并生成相应的Bean对象,然后将它们交给Spring容器进行管理,但是到底是如何使用spring.factories文件的呢,我们今天就来源码解析一番。

二、源码解读

几乎任何一个SpringBoot的项目都是从被@SpringBootApplication注解标记的类开始的

@SpringBootApplication
@Slf4j
public class Application {

    public static void main(String[] args) {

        SpringApplication.run(Application.class);

    }

点击SpringApplication.run(),进入SpringApplication类对应的run方法,该方法两个参数,第一个参数是启动类本身,用于解析启动类(解析标记的注解、启动类作为一个配置类,也需要解析),args是一个可变参数,用于接收传入的虚拟机参数


    public static ConfigurableApplicationContext run(Class<?> primarySource, String... args) {
        return run(new Class[]{primarySource}, args);
    }

观察SpringApplication类的整体结构,发现该类一个参构造方法中有

private List<ApplicationContextInitializer<?>> initializers的赋值

 进一步点开getSpringFactoriesInstances方法,发现该方法中似乎有根据名称加载和实例创建的两个方法

 首先跟踪SpringFactoriesLoader.loadFactoryNames()方法,该方法的入参数ApplicationContextInitializer.class类,方法体中的返回值语句如下:

(List)loadSpringFactories(classLoader).getOrDefault(factoryTypeName, Collections.emptyList());

这一行语句可以改成两部分更清晰:

Map<String, List<String>> A= (List)loadSpringFactories(classLoader);

List<String> B=A.getOrDefault(factoryTypeName, Collections.emptyList());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值