SpringBoot启动流程(需要掌握ioc)

SpringBoot

启动流程

SpringApplication 构造器

1.通过导入的依赖,判断项目类型
this.webApplicationType = WebApplicationType.deduceFromClasspath();
{
	1.eureka servlet
	2.gateway reavtive
}
2.推断主构造环境,通过方法调用栈查看main方法所在
this.mainApplicationClass = deduceMainApplicationClass();
{
	StackTraceElement
}

run()方法

0.启动计时对象
  stopWatch.start() ----.stop 
1.获取监听器
SpringApplicationRunListeners listeners = getRunListeners(args);
try 开始
2.将main方法的参数封装成对象--命令行参数
ApplicationArguments applicationArguments = new DefaultApplicationArguments(args); 
3.通过参数构建环境
ConfigurableEnvironment environment = prepareEnvironment(listeners, applicationArguments);
4.打印banner
Banner printedBanner = printBanner(environment);   
5.通过构造器判断出来的项目类型初始化上下文环境ioc容器
context = createApplicationContext();
{
    初始化ioc容器context,此时只有几个开天辟地的beanDefination
    没有单例对象
}
6.初始化环境,给context添加bean组件,通过创建beanFactory,填入args封装对象
prepareContext(context, environment, listeners, applicationArguments, printedBanner);
{
    准备上下文环境,此时单例池中有了自动装配bean
}
7.刷新容器
refreshContext(context);
{
    只找到了App类
	postProcessBeanFactory   
    找到实现BeanFactoryPostProcessor接口的方法 比如mybatis 的相关接口,自己的含component的类以及200来个BD(后置处理器、mvc组件、自动装配的处理器)
    invokeBeanFactoryPostProcessors 
    初始化容器
    onRefresh(); 
   	将符合条件的beanDefinition创建bean
    finishBeanFactoryInitialization
    finishRefresh
}    
8.结束计时打印启动时间
stopWatch.stop();
9.回调 表示程序准备完成
listeners.started(context);
10.
callRunners(context, applicationArguments);
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值