美文网首页
SpringBoot启动原理

SpringBoot启动原理

作者: 窗外星河低悬im | 来源:发表于2021-09-25 14:56 被阅读0次

    博客来源:https://blog.csdn.net/jiohfgj/article/details/104472570?utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-1.no_search_link

    https://zhuanlan.zhihu.com/p/136708974

    这张图简直不要太简便,感谢博主

    image.png

    总结:
    1.执行main()方法后,运行SpringBootApplication.run
    2.创建SpringBootApplication对象。创建对象时主要做了四步,判断当前项目是否是web项目,
    加载所有可用的初始化器,设置所有可用程序监听器,推断并设置main方法的定义类。
    3.执行run()方法
    ①启动任务执行的时间监听器
    ②headless系统属性设置
    ③ 通过SpringFactoriesLoader,获取到所有META-INF/spring.factories下的SpringApplicationRunListeners并实例化,启动已准备好的监听器,监听SpringBoot应用的启动。
    ④ 创建并配置当前SpringBoot应用将要使用的Environment,包括当前有效的PropertySource以及Profile。
    ⑤遍历调用所有的SpringApplicationRunListeners的environmentPrepared()的方法,通知这些监听器SpringBoot应用的Environment已经完成初始化。
    ⑥打印SpringBoot应用的banner,SpringApplication的showBanner属性为true时,如果classpath下存在banner.txt文件,则打印其内容,否则打印默认banner。
    ⑦根据启动时设置的applicationContextClass和在initialize方法设置的webEnvironment,创建对应的applicationContext。
    ⑧创建异常解析器,用在启动中发生异常的时候进行异常处理(包括记录日志、释放资源等)。
    ⑨设置SpringBoot的Environment,注册Spring Bean名称的序列化器BeanNameGenerator,并设置资源加载器ResourceLoader,通过SpringFactoriesLoader加载ApplicationContextInitializer初始化器,调用initialize方法,对创建的ApplicationContext进一步初始化。
    ⑩调用所有的SpringApplicationRunListeners的contextPrepared方法,通知这些Listener当前ApplicationContext已经创建完毕。
    a.最核心的一步,将之前通过@EnableAutoConfiguration获取的所有配置以及其他形式的IoC容器配置加载到已经准备完毕的ApplicationContext。
    b.调用所有的SpringApplicationRunListener的contextLoaded方法,加载准备完毕的ApplicationContext。
    c.调用refreshContext,注册一个关闭Spring容器的钩子ShutdownHook,当程序在停止的时候释放资源(包括:销毁Bean,关闭SpringBean的创建工厂等)

    相关文章

      网友评论

          本文标题:SpringBoot启动原理

          本文链接:https://www.haomeiwen.com/subject/hwsxnltx.html