在外面启动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 启动内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
            
                                            
                                            
                                            
                                            
                                            
发表评论