前言
学习了一段时间的springboot,知道了boot的四大核心组件,自动配置(autoconfiguration),起步依赖(starter),监控器(actuator),命令行界面(groovy),本文注重讲解starter的启动原理,通过对boot的源码追踪,向大家展示starter的所有细节。
一、什么是starter
也许还有部分同学不知道starter的具体含义,在此简单的解释一下,starter在自动配置的基础之上,使得boot能够自动的加载各种应用模块到boot中,而且不需要我们做任何的配置,直接按默认配置即可,这极大地简化了我们的开发时间。
二、注解追踪
-
进入@SpringBootApplication注解
-
进入@EnableAutoConfiguration注解
-
进入AutoConfigurationImportSelector类
-
进入selectImports方法
-
进入getCandidateConfigurations(annotationMetadata, attributes)方法
-
进入loadSpringFactories(classLoaderToUse)方法
-
最终定位到getResource方法
注解追踪到此处就算完了,接下来我们就只剩一个问题,通过调用刚才注解里一系列的方法,可以把spring.factories文件中所有的配置类加载到boot中,那我们又是何时调用这个方法进行加载的呢,继续进行我们的方法追踪你就能过得到答案!注:另外再给一张图帮助你准确的找到上述文件
三、方法追踪
- 进入run方法
- 进入refreshContext(context)方法
- 持续点击进入refresh方法
- 进入ServletWebServerApplicationContext实现类
- 进入父类的refresh方法
- 进入invokeBeanFactoryPostProcessors(beanFactory)方法
- 找到invokeBeanFactoryPostProcessors,进入postProcessBeanFactory(beanFactory)方法
- 进入ConfigurationClassPostProcessor类
- 进入processConfigBeanDefinitions方法
- 进入parse(candidates)方法
- 按ctrl加f找到doProcessConfigurationClass方法
- 在doProcessConfigurationClass方法中找到processImports方法,点击进入
- 最终找到selectImports方法
经过孜孜不倦的追踪,终于把它给追到了,相信此时的你是兴奋的,哪天你想追女神却苦求无果时,就可以来看看本文,相信本文会给你莫名的勇气与力量,一鼓作气把你的女神抱回家,最后不用感谢我,你开心就好!虽说是从两个方向进行追踪,但最后我们总结起来的时候确实很有收获,先在注解中通过import类导入所有的配置类,最后在run运行时对bean的加载过程中,处理加了@Configuration注解的类,再处理类上的@Import注解,最终又回到了selectImports方法,过程不可谓不饶,但不得不说会饶的程序员才是优秀的程序员。
总结
学无止境,IT学是不可能学完的,但我们可以朝着一个目标,比如立志学秃还是可以的!