springboot-starter启动原理

前言

学习了一段时间的springboot,知道了boot的四大核心组件,自动配置(autoconfiguration),起步依赖(starter),监控器(actuator),命令行界面(groovy),本文注重讲解starter的启动原理,通过对boot的源码追踪,向大家展示starter的所有细节。

一、什么是starter

也许还有部分同学不知道starter的具体含义,在此简单的解释一下,starter在自动配置的基础之上,使得boot能够自动的加载各种应用模块到boot中,而且不需要我们做任何的配置,直接按默认配置即可,这极大地简化了我们的开发时间。

二、注解追踪

  1. 进入@SpringBootApplication注解
    在这里插入图片描述

  2. 进入@EnableAutoConfiguration注解
    在这里插入图片描述

  3. 进入AutoConfigurationImportSelector类
    在这里插入图片描述

  4. 进入selectImports方法
    在这里插入图片描述

  5. 进入getCandidateConfigurations(annotationMetadata, attributes)方法
    在这里插入图片描述

  6. 进入loadSpringFactories(classLoaderToUse)方法
    在这里插入图片描述

  7. 最终定位到getResource方法
    在这里插入图片描述
    注解追踪到此处就算完了,接下来我们就只剩一个问题,通过调用刚才注解里一系列的方法,可以把spring.factories文件中所有的配置类加载到boot中,那我们又是何时调用这个方法进行加载的呢,继续进行我们的方法追踪你就能过得到答案!

    注:另外再给一张图帮助你准确的找到上述文件
    在这里插入图片描述

三、方法追踪

  1. 进入run方法
    在这里插入图片描述
  2. 进入refreshContext(context)方法
    在这里插入图片描述
  3. 持续点击进入refresh方法
    在这里插入图片描述
  4. 进入ServletWebServerApplicationContext实现类
    在这里插入图片描述
  5. 进入父类的refresh方法
    在这里插入图片描述
  6. 进入invokeBeanFactoryPostProcessors(beanFactory)方法
    在这里插入图片描述
  7. 找到invokeBeanFactoryPostProcessors,进入postProcessBeanFactory(beanFactory)方法
    在这里插入图片描述
  8. 进入ConfigurationClassPostProcessor类
    在这里插入图片描述
  9. 进入processConfigBeanDefinitions方法
    在这里插入图片描述
  10. 进入parse(candidates)方法
    在这里插入图片描述
  11. 按ctrl加f找到doProcessConfigurationClass方法
    在这里插入图片描述
  12. 在doProcessConfigurationClass方法中找到processImports方法,点击进入
    在这里插入图片描述
  13. 最终找到selectImports方法
    在这里插入图片描述
    经过孜孜不倦的追踪,终于把它给追到了,相信此时的你是兴奋的,哪天你想追女神却苦求无果时,就可以来看看本文,相信本文会给你莫名的勇气与力量,一鼓作气把你的女神抱回家,最后不用感谢我,你开心就好!虽说是从两个方向进行追踪,但最后我们总结起来的时候确实很有收获,先在注解中通过import类导入所有的配置类,最后在run运行时对bean的加载过程中,处理加了@Configuration注解的类,再处理类上的@Import注解,最终又回到了selectImports方法,过程不可谓不饶,但不得不说会饶的程序员才是优秀的程序员。

总结

学无止境,IT学是不可能学完的,但我们可以朝着一个目标,比如立志学秃还是可以的!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值