SpringBoot源码 | prepareContext方法解析

本文涉及的产品
全局流量管理 GTM,标准版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
云解析 DNS,旗舰版 1个月
简介: 本文主要讲述SpringBoot启动流程源码中的prepareContext()方法

prepareContext

SpringBoot启动流程中SpringApplication.run方法执行流程中的prepareContext方法主要是为了配置容器的基本信息,prepareContext方法的入参包括DefaultBootstrapContext、ConfigurableApplicationContext、ConfigurableEnvironment、SpringApplicationRunListeners、ApplicationArguments、Banner,基本上在启动流程中加载的应用程序上下文,配置的环境信息,运行监听器,应用参数及日志打印对象Banner都用到了,下面来看一下prepareContext的源码

image.png

context.setEnvironment

context.setEnvironment方法主要是为应用程序的上下文设置environment,可以直接参考方法源码的注释

image.png

image.png

继续向下执行看到

postProcessApplicationContext

postProcessApplicationContext方法主要是对应用程序上下文进行相关处理,同时子类也可以根据需要进行相关处理

image.png

debug源码可以看到这里主要是为应用程序上下文设置ConversionService,设置完成之后

applyInitializers

applyInitializers方法主要是在refresh之前将ApplicationContextInitializer应用于应用程序上下文context,或者说是获取所有初始化器调用initialize()初始化,源码如下

image.png

listeners.contextPrepared

listeners.contextPrepared方法主要是为了触发所有 SpringApplicationRunListener监听器的contextPrepared事件方法,源码

image.png

bootstrapContext.close

bootstrapContext.close方法的官方注释意思是说当BootstrapContext关闭并且ApplicationContext准备好时这个方法会被调用

image.png

logStartupProfileInfo

logStartupProfileInfo方法调用主要是通过日志记录活动的配置文件信息,debug可以看到如图

image.png

配置文件内容

image.png

下面我们来看一下为什么会打印druid,源码中List<String> activeProfiles = quoteProfiles(context.getEnvironment().getActiveProfiles());为获取配置的环境信息中激活的profiles信息,跟进去可以看到

image.png

继续跟doGetActiveProfiles方法

image.png

继续跟doGetActiveProfilesProperty可以看到这里有一个常量值

image.png

常量的值就是

image.png

正是我们在配置文件application.yml中看到的配置参数key值,之后在回到主方法prepareContext中继续往下跟进看到context.getBeanFactory方法,官方注释就是Add boot specific singleton beans 添加启动特定的单例bean同时执行beanFactory.registerSingleton方法,官方注释是

Add the given singleton object to the singleton cache of this factory.将给定的单例对象添加到此工厂的单例缓存,

beanFactory.registerSingleton

由beanFactory.registerSingleton方法的源码可以看到

image.png

跟进该方法看到registerSingleton方法主要是addSingleton方法,也就是我们说的将给定的单例对象添加到此工厂的单例缓存,

image.png

继续执行,当printedBanner不为null的时候执行同springApplicationArguments一样的操作,继续向下执行我们看到getAllSources方法

getAllSources

getAllSources方法是为应用程序上下文设置所有的资源在应用程序上下文被调用时,源码如图

image.png继续向下执行看到load方法

load

load方法Load beans into the application context 加载启动类 the context to load beans into 将启动类注入容器

image.png

加载完成之后执行listeners.contextLoaded触发所有SpringApplicationRunListener监听器contextLoaded方法

listeners.contextLoaded

listeners.contextLoaded方法为运行监听器SpringApplicationRunListener执行contextLoaded方法

image.png

至此prepareContext就算执行完成了,对应的容器的基本配置也就加载完成了,后续继续讲解后续在SpringBoot启动时执行的方法。

相关文章
|
3天前
|
编解码 缓存 Prometheus
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
本期内容为「ximagine」频道《显示器测试流程》的规范及标准,我们主要使用Calman、DisplayCAL、i1Profiler等软件及CA410、Spyder X、i1Pro 2等设备,是我们目前制作内容数据的重要来源,我们深知所做的仍是比较表面的活儿,和工程师、科研人员相比有着不小的差距,测试并不复杂,但是相当繁琐,收集整理测试无不花费大量时间精力,内容不完善或者有错误的地方,希望大佬指出我们好改进!
46 16
「ximagine」业余爱好者的非专业显示器测试流程规范,同时也是本账号输出内容的数据来源!如何测试显示器?荒岛整理总结出多种测试方法和注意事项,以及粗浅的原理解析!
|
16天前
|
缓存 NoSQL Java
springboot怎么使用rides缓存方法的返回值 完整例子
通过上述步骤,我们成功地在 Spring Boot 项目中集成了 Redis 缓存,并通过注解的方式实现了方法返回值的缓存。这种方式不仅提高了系统的性能,还简化了缓存管理的复杂度。使用 Spring Boot 的缓存注解和 Redis,可以轻松地实现高效、可靠的缓存机制。
53 23
|
24天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的留守儿童爱心网站设计与实现(计算机毕设项目实战+源码+文档)
博主是一位全网粉丝超过100万的CSDN特邀作者、博客专家,专注于Java、Python、PHP等技术领域。提供SpringBoot、Vue、HTML、Uniapp、PHP、Python、NodeJS、爬虫、数据可视化等技术服务,涵盖免费选题、功能设计、开题报告、论文辅导、答辩PPT等。系统采用SpringBoot后端框架和Vue前端框架,确保高效开发与良好用户体验。所有代码由博主亲自开发,并提供全程录音录屏讲解服务,保障学习效果。欢迎点赞、收藏、关注、评论,获取更多精品案例源码。
59 10
|
24天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的家政服务管理平台设计与实现(计算机毕设项目实战+源码+文档)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
43 8
|
24天前
|
JavaScript 搜索推荐 Java
基于SpringBoot+Vue实现的家乡特色推荐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
54 8
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生就业服务平台设计与实现(系统源码+文档+数据库+部署等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
63 6
|
24天前
|
JavaScript Java 测试技术
基于Java+SpringBoot+Vue实现的车辆充电桩系统设计与实现(系统源码+文档+部署讲解等)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
55 6
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue的班级综合测评管理系统设计与实现(系统源码+文档+数据库+部署等)
✌免费选题、功能需求设计、任务书、开题报告、中期检查、程序功能实现、论文辅导、论文降重、答辩PPT辅导、会议视频一对一讲解代码等✌
40 4
|
24天前
|
JavaScript Java 测试技术
基于SpringBoot+Vue实现的高校食堂移动预约点餐系统设计与实现(源码+文档+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
66 3
|
24天前
|
JavaScript NoSQL Java
基于SpringBoot+Vue实现的大学生体质测试管理系统设计与实现(系统源码+文档+数据库+部署)
面向大学生毕业选题、开题、任务书、程序设计开发、论文辅导提供一站式服务。主要服务:程序设计开发、代码修改、成品部署、支持定制、论文辅导,助力毕设!
36 2

推荐镜像

更多