SpringBoot源码 | prepareContext方法解析

简介: 本文主要讲述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启动时执行的方法。

相关文章
|
1月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
9天前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
67 3
|
1月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
458 1
|
3月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
3月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
554 5
|
3月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
304 3
|
4月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
179 1
|
4月前
|
Java 数据库 开发者
Spring Boot 框架超级详细总结及长尾关键词应用解析
本文深入讲解Spring Boot框架的核心概念、功能特性及实际应用,涵盖自动配置、独立运行、starter依赖等优势。通过Web开发、微服务架构、批处理等适用场景分析,结合在线书店实战案例,演示项目初始化、数据库设计、分层架构实现全流程。同时探讨热部署、多环境配置、缓存机制与事务管理等高级特性,助你高效掌握Spring Boot开发技巧。代码示例详尽,适合从入门到进阶的学习者。
1410 0

推荐镜像

更多
  • DNS
  • 下一篇
    oss教程