springboot自动配置原理

SpringBoot在启动的时候,加载主配置类,主配置类上有注解@SpringBootApplication

/**
 * SpringBootApplication 来标注一个主程序类,说明这是一个springboot应用
 */
@SpringBootApplication
public class MyFirstSpringbootApplication {

    public static void main(String[] args) {
        SpringApplication.run(MyFirstSpringbootApplication.class, args);
    }

}

 

在注解@SpringBootApplication中,通过@EnableAutoConfiguration注解开启自动配置功能

 

通过@EnableAutoConfiguration源码,可以看出,导入了AutoConfigurationImportSelector,利用EnableAutoConfigurationImportSelector给容器中导入一些组件。

 

可以查看AutoConfigurationImportSelector.class的源码中的selectImports()方法的内容,在selectImport方法中,使用了getAutoConfigurationEntry方法。

 

追溯到getAutoConfigurationEntry方法中,其中使用了一个getCandidateConfigurations方法,作用是获取候选的配置。

 

继续追溯至getCandidateConfigurations方法,其中使用SpringFactoriesLoader.loadFactoryNames。

 

继续追溯至loadFactoryNames方法,目的是扫描jar包所有类路径下的META-INF/spring.factories文件,得到其url,并进行遍历,最后包装得到一个properties文件 。

 

从返回的properties文件中获取到EnableAutoConfiguration.class类(类名)对应的值,然后把他们添加在容器中。

 

总的来说,就是将 类路径下 META-INF/spring.factories 里面配置的所有EnableAutoConfiguration的值加入到了容器中。

 

每一个像这样的 xxxAutoConfiguration类都是容器中的一个组件,都加入到容器中;用他们来做自动配置;其中的每一个自动配置类,都开启自动配置功能。

 

这时,启动了自动配置功能,才是自动配置的开始。

 

以org.springframework.boot.autoconfigure.web.servlet.HttpEncodingAutoConfiguration为例,介绍自动配置原理。

 

所有在配置文件中可以配置的属性,都在xxxPropertise里面封装着,这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;这里是ServerProperties类,如下图。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值