当前位置: 代码网 > it编程>编程语言>Java > spring boot 启动过程步骤详解

spring boot 启动过程步骤详解

2025年11月04日 Java 我要评论
在外面启动spring boot项目的时候,入口在如下方法中那么它的启动过程是如何的,通过点击进去发现是如下方法; public static configurableapplicationcont

在外面启动spring boot项目的时候,入口在如下方法中

那么它的启动过程是如何的,通过点击进去发现是如下方法;

  public static configurableapplicationcontext run(class<?>[] primarysources, string[] args) {
        return (new springapplication(primarysources)).run(args);
    }

在这个方法中,可以分为2个大步骤;
一:new springapplication(primarysources): 即将我们传进来的class进行创建为springapplication。

在这里面
1.记录传入的primarysources
2.推测当前应用的类型

3.从spring.factories中获取bootstrapregistryinitializer
4.从spring.factories中获取applicationcontextinitializer
5.并且也获取applicationlistener

	this.bootstrapregistryinitializers = new arraylist<>(
				getspringfactoriesinstances(bootstrapregistryinitializer.class));
		setinitializers((collection) getspringfactoriesinstances(applicationcontextinitializer.class));
		setlisteners((collection) getspringfactoriesinstances(applicationlistener.class));
		this.mainapplicationclass = deducemainapplicationclass();

6.推测当前main方法对应的启动类

二:调用run()方法
1.创建并初始化defaultbootstrapcontext
2.获取springapplicationrunlisteners

springapplicationrunlisteners listeners = getrunlisteners(args);

3.调用springapplicationrunlisteners 的starting(),发布applicationstartingevent事件。
4.将启动参数artgs封装为applicationarguments对象
5.准备environment
6.创建spring容器(applicationcontext)
7.预处理spring容器

preparecontext(bootstrapcontext, context, environment, listeners, applicationarguments, printedbanner);

8.刷新

	refreshcontext(context);

9.调用springapplicationrunlistener的started()方法,发布applicationstartedevent事件

listeners.started(context, timetakentostartup);

10.调用springapplicationrunlistener的ready()方法,发布applicationreadyevent事件

try {
			duration timetakentoready = duration.ofnanos(system.nanotime() - starttime);
			listeners.ready(context, timetakentoready);
		}
		catch (throwable ex) {
			handlerunfailure(context, ex, null);
			throw new illegalstateexception(ex);
		}

到此这篇关于spring boot 启动过程的文章就介绍到这了,更多相关spring boot 启动内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com