SpringBoot自动配置原理

最近在学springboot ,一直觉得框架中的自动配置功能很强大,省去了我们大量配置,然后我就通过网上和学习源码的方式大概明白了基本的实现原理,我给大家梳理一下。

一,关于自动配置所需的jar包,在  spring-boot-autoconfigure-2.0.3.RELEASE.jar 下,主要包含了如下图所示的配置(并未截全):

SpringBoot自动配置原理

里面含大量的配置文件,class名称格式都为  XXXAutoConfigure.class 文件 ,看到这样的文件就是自动配置类了,

为了能在控制台观察自动配置的启动,我们可以在 application.yml 里面设置属性  debug=true。

 

二,当springboot项目运行时候加载自动配置流程,运行原理

SpringBoot自动配置原理

点进 @SpringBootApplication  里面

SpringBoot自动配置原理

 

里面有个   @EnableAutoConfiguration  它就自动配置的核心类 我们先看看它的源码

SpringBoot自动配置原理

 

这里的关键功能是@Import注解导入的配置功能

AutoConfigurationImportSelector 类里 selectImports  方法将 项目所需的自动配置类以数组的形式返回出去

SpringBoot自动配置原理

将   spring-boot-autoconfigure-2.0.3.RELEASE.jar  /   META-INF  / spring.factories 里面的自动配置全类名信息存储在List

SpringBoot自动配置原理

spring.factories 文件存储全部自动配置类的全类名信息

SpringBoot自动配置原理

 

得到全部自动配置类后,将过滤掉不需要的自动配置类

SpringBoot自动配置原理

 

最后筛选后的自动配置类,将它们注册到spring容器中。

 

以上为个人对自动配置原理的初步理解,欢迎大佬指点不足