【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理

本文涉及的产品
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
容器服务 Serverless 版 ACK Serverless,952元额度 多规格
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 【Spring专场】「MVC容器」不看源码就带你认识核心流程以及运作原理

前提回顾


之前已经写了很多问斩针对于SpringMVC的的执行原理和核心流程,在此再进行冗余介绍就没有任何意义了,所以我们主要考虑的就是针对于SpringMVC还没但大框架有介绍的相关内容解析分析和说明,那么接下来就让我们来接入Spring框架在核心的三大框架之一。



DispatcherServlet的族谱


核心类的继承关系

image.png

核心的主要角色


XXAware的接通


主要用于BeanPostProcessor进行相关的获取系统内部的相关的XX组件功能的实现机制,通过实现该实现类的接口后,就可以非常方便向spring框架索取一些框架信息。



EnvironmentCapable


可以通过该类接口实现机制,进行获取相关的环境变量对象。


HtpServeltBean


是HttpServlet抽象的简单实现接口,以及对于相关的功能的进行一步执行扩展


FrameworkServlet执行类


主要是Spring web框架的一个基础父类,他会在dispatcherServlet创建之前创建一个父容器和自容器之间的关系。


DispatcherServlet实现类


主要是Spring web框架的,也是之前我们文章介绍的核心机制执行流程,它主要用于协调SpringMVC的整体运作流程和执行流程,初始化各个组件机制,比如:HandlerMapping组件、HandlerAdapter组件和HandlerExecuteChain。


借用一个网图(懒得自己在进行画了)image.png



容器的创建过程


主要在Spring框架和MVC框架领域里面主要分为两种类型的容器:我们将他们定义为:业务容器和web容器。 容器会先进性建立业务容器(也可以说是父容器机制),再进行建立web容器(子容器),在初始化web容器的时候,会将父容器绑定到子容器中,作为其父容器。



父容器的初始化入口


主要依靠我们系统内部的ContextLoaderListener的contextInitialized方法,当ServletContext类被加载后,监听的contextInitailized方法就会被servlet容器进行调用。


父容器的创建流程


contextIntialized方法被调用之后,会进行创建createWebApplicationContext方法,调用内部的determineContextClass方法,进行判断初始化容器的类型,默认为XmlWebApplicationContext对象类。主要采用instantiateClass方法进行反射生成对应的容器对象。


此外对于SprringBoot以及其他类型的容器而言更多可能会选择


ConfigureAndRefreshWebApplicationContext或者AnnotationConfigApplicationContext类,前者更多会进行刷新容器实现和使用,后者主要以JavaConfig的方式进行构建spring容器组件。


最后将生产的父子容器对象设置和注入到相关的ServletContext容器的全局上下文区。



子容器的初始化入口


HttpServletBean核心类覆盖了httpServlet类的init的方法,这个就是创建web容器的入口。


  1. HttpServletBean的init方法的调用
  2. 会调用相关的nitFrameworkServlet方法
  3. 会调用FrameworkServlet内的initServletBean方法。



子容器的初始化流程


  1. servletContext的容器获取ContextServletListener中的创建的容器对象
  2. 如果this.WebApplicationContext 不是空,进设置配置相关的父容器和刷新容器。


  1. 创建完对应的web容器之后,将上面的容器作为该容器的父容器,将rootContext作为父容器,并且同样进行设置绑定到对应的ServletContext容器中。




相关文章
|
2月前
|
缓存 安全 Java
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
从底层源码入手,通过代码示例,追踪AnnotationConfigApplicationContext加载配置类、启动Spring容器的整个流程,并对IOC、BeanDefinition、PostProcesser等相关概念进行解释
187 24
Spring框架中Bean是如何加载的?从底层源码入手,详细解读Bean的创建流程
|
27天前
|
Java 测试技术 Windows
咦!Spring容器里为什么没有我需要的Bean?
【10月更文挑战第11天】项目经理给小菜分配了一个紧急需求,小菜迅速搭建了一个SpringBoot项目并完成了开发。然而,启动测试时发现接口404,原因是控制器包不在默认扫描路径下。通过配置`@ComponentScan`的`basePackages`字段,解决了问题。总结:`@SpringBootApplication`默认只扫描当前包下的组件,需要扫描其他包时需配置`@ComponentScan`。
|
1月前
|
存储 监控 Shell
docker的底层原理二:容器运行时环境
本文深入探讨了Docker容器运行时环境的关键技术,包括命名空间、控制组、联合文件系统、容器运行时以及分离的进程树,这些技术共同确保了容器的隔离性、资源控制和可移植性。
38 5
|
1月前
|
XML Java 应用服务中间件
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
【Spring】运行Spring Boot项目,请求响应流程分析以及404和500报错
159 2
|
28天前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
62 0
|
2月前
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
116 3
|
1月前
|
JSON 前端开发 JavaScript
优雅!Spring Boot 3.3 实现职责链模式,轻松应对电商订单流程
本文介绍如何使用 Spring Boot 3.3 实现职责链模式,优化电商订单处理流程。通过将订单处理的各个环节(如库存校验、优惠券核验、支付处理等)封装为独立的处理器,并通过职责链将这些处理器串联起来,实现了代码的解耦和灵活扩展。具体实现包括订单请求类 `OrderRequest`、抽象处理器类 `OrderHandler`、具体处理器实现(如 `OrderValidationHandler`、`VerifyCouponHandler` 等)、以及初始化职责链的配置类 `OrderChainConfig`。
|
1月前
|
XML 前端开发 Java
拼多多1面:聊聊Spring MVC的工作原理!
本文详细剖析了Spring MVC的工作原理,涵盖其架构、工作流程及核心组件。Spring MVC采用MVC设计模式,通过DispatcherServlet、HandlerMapping、Controller和ViewResolver等组件高效处理Web请求。文章还探讨了DispatcherServlet的初始化和请求处理流程,以及HandlerMapping和Controller的角色。通过理解这些核心概念,开发者能更好地构建可维护、可扩展的Web应用。适合面试准备和技术深挖
42 0
|
2月前
|
Kubernetes Linux 虚拟化
一文详解容器技术简介和基本原理
本文全面阐述了容器技术的发展历程、关键技术、架构和当前的行业生态,特别是容器技术在云环境中的应用和演进。
|
3月前
|
消息中间件 Kubernetes 数据库
在k8S中,初始化容器(init container)概念原理是什么?
在k8S中,初始化容器(init container)概念原理是什么?