解读Spring源代码(Web MVC)

Spring框架的MVC模式在Java中的实现 在当今的软件开发领域,构建高效、可维护的Web应用是至关重要的。Spring框架的MVC模式为Java开发者提供了一种强大而灵活的方式来实现Web应用。本文的目的就是详细介绍Spring框架的MVC模式在Java中的实现,涵盖从基本概念到实际项目开发的各个方面,帮助读者全面掌握这一技术。本文首先介绍相关的术语和核心概念,通过有趣的故事引出MVC模式。接着解释核心概念及其相互关系,并给出原理和架构的示意图与流程图。然后详细阐述核心算法原理和具体操作步骤,结合数学模型和公式进行说明。 阅读详情

    Spring的Web启动是个神马原理呢,看了一天源代码,晚上自己动手写个Demo。Spring启动web容器时通过Servlet或者定义一个Listener来初始化自己的Ioc容器,还有一个DispatchServlet来给你的ActionBean中注入你所需要的类。

              我定义一个类WebLoader 来继承org.springframework.web.context.ContextLoader并重写他的createWebApplicationContext方法,我只改源代码中的一句话    wac.setConfigLocation(sc.getInitParameter("xcontextConfigLocation"));

这个wac是ConfigurableWebApplicationContext

Spring源代码中默认的是contextConfigLocation参数你每次需要这样定义

 <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>WEB-INF/c1.xml</param-value>
 </context-param>

现在我改了以后

Spring就在web.xml中找下面这个东西

  <context-param>
  <param-name>xcontextConfigLocation</param-name>
  <param-value>WEB-INF/c2.xml</param-value>
 </context-param>

c1.xml中定义一句话<bean id="b1" class="com.Bean1"/>

c2.xml中定义一句话<bean id="b2" class="com.Bean2"/>

然后我定义一个Servlet在web容器启动时自动加载

 <servlet>
  <servlet-name>Context</servlet-name>
  <servlet-class>com.InitWeb</servlet-class>
  <load-on-startup>0</load-on-startup>
 </servlet>

这个servlet的Init方法为

    @Override
    public void init() throws ServletException {
        System.out.println("Hei i am init");
        ServletContext sc = getServletContext();
        WebApplicationContext parent=WebApplicationContextUtils.getWebApplicationContext(sc);
        WebLoader loader=new WebLoader();
        WebApplicationContext  wac=loader.createWebApplicationContext(sc, parent);
        System.out.println(wac.getBeanDefinitionCount());
        sc.setAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);
        super.init();
    }

我在jsp中写

        <%
            WebApplicationContext wac = WebApplicationContextUtils
                    .getRequiredWebApplicationContext(getServletContext());
                Bean1 b1 = (Bean1) wac.getBean("b1");
                out.println(b1.getName()+"<br/>");
                Bean2 b2 = (Bean2) wac.getBean("b2");
                out.println(b2.getName()+"<br/>");
        %>

输出结果为

I am Bean One!
I am Bean Two!

在Servlet中Web容器中的ApplicationContext被我重写了,原本按默认参数只加载了c1.xml中的bean,我把容器中的WebApplicationContext 提取出来作为c2.xml的parent创建一个新的WebApplicationContext然后加载到ServletContext现在web上下文中的applicationcontext就含有两个配置文件中的bean了。

    归根到底Spring在web容器中注入的基本原理就是在web容器启动时初始化WebApplicationContext 存到ServletContext中去,用这WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE就可以读到当前的Ioc容器。


Spring MVC源码解读『Idea如何构建Spring MVC应用』 从工作几乎一直在使用开箱即用的Spring Boot,很少使用Spring MVC。在上篇文章介绍Spring MVC示例中搭建那个HelloWorld demo过程中,还费了一些周折。想着可能很多人的Java Web之旅都是从Spring Boot开启的,本篇文章我们就来介绍一下如何使用Idea构建Spring MVC应用,以及通过Idea部署Spring MVC应用。 1. Idea构建并部署Spring MVC应用 1.1 创建Web应用 这里我们来看一个最简单的问题,如何通过Idea构建并部署 阅读详情

相关推荐

深入解读Spring MVC架构与应用

Spring MVC是Spring框架的一部分,是一个基于Java实现MVC设计模式的请求驱动类型的轻量级Web框架。它通过分离模型(Model)、视图(View)和控制器(Controller)来简化Web开发。Spring MVC提供了丰富的注解,可以简化配置,同时支持RESTful风格的URL映射,易于与前端技术整合,是目前企业级Java Web开发的主流框架之一。MVC(Model-View-Controller)是一种被广泛使用的软件设计模式,用于组织代码以分离关注点。

weixin_36289742的博客 992

Spring Web MVC的介绍

Spring Web MVC 是围绕 DispatcherServlet 设计而成的,它是将请求转发给处理器

鬼剑愁的专栏 458

Spring MVC入门:HelloWorld实例详细解读

Spring MVC是Java语言中广泛应用的MVC框架,它以请求驱动,分离了视图、模型和控制器,通过灵活的配置实现了强大的开发功能。本章节将概述Spring MVC架构的核心组件和基本工作原理,以帮助开发者快速把握Spring MVC的设计哲学和技术特点。Spring MVC的工作流程遵循MVC设计模式,从客户端发起请求开始,直到返回响应结束。流程如下:客户端发起请求,请求通过DispatcherServlet被拦截。

weixin_35732273的博客 392

解读spring源代码心得

spring对于研究mvc框架和其他技术有很深的意义.所以努力研究spring源代码很有重要意义,如何解读源代码,很多人困惑,本人在写这篇东西的时候,也是经过了几个月的时间的摸索才有了一点眉目,希望与spring的爱好者共同分享. 一,如何解读某某特定功能的某些源代码. 1 比如,本人想知道spring是如何解析xml文件的,那么应该解读哪些java文件呢?我们就带着这个问题,找到哪些源文件,

Java海洋 4736

Java Web自定义MVC框架项目源代码

Java Web自定义MVC框架完整的项目文件,包括源代码和创建数据库的SQL语句,详细的讲解请参考http://blog.youkuaiyun.com/jackfrued/article/details/42774459

springMVC源码详解

这本书详细的分析了springMVC框架在实践中如何运用,以及它内部是如何实现的,源码该如何解读等,是深入学习springMVC框架的必备宝典

Spring Web MVC

今天来复习 Spring Web MVC根据官方描述,Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就被纳入了 Spring 框架之中。其正式名称 “Spring Web MVC” 源于它的源模块名称(spring-webmvc),不过在日常开发中,我们通常简称它为 “Spring MVC”。那么,这里提到的 Servlet 又是什么呢?简单来说,Servlet 是一种实现动态页面的技术,更准确地讲,它是一套 Java Web 开发的规范,或者说是技术标准。

Y_1215的博客 1847

SpringMvc源码

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 另外还有一种基于组件的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。 Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;

全面解读 Spring 和 Spring MVC 常用注解

Spring 是一个功能强大的 Java 框架,用于构建企业级应用程序。Spring MVC 是 Spring 框架的一部分,专注于构建基于 Web 的应用程序。为了有效地使用这些框架,了解常用注解及其应用场景至关重要。

开源AI 专属 UI——papyrai-ui。《千界明彻录》(故事形式构建元思维)——胡说小说。更多思辨内容在公众号。 1773

ScreenHook-截屏拦截

截屏拦截Hook代码 研究反截屏,截屏拦截的孩子们,下吧

别再只调包了!深入理解机器学习虚拟筛选中的分子指纹(ECFP/Morgan)

本文深入探讨了ECFP/Morgan分子指纹在机器学习虚拟筛选中的应用与优化策略。通过解析半径参数与比特长度的化学意义,揭示了如何通过参数调优提升模型性能20%以上,特别适用于药物发现领域的高通量筛选。文章还提供了工程实践中的参数优化策略和多指纹融合技术,为开发者提供从理论到实践的全面指导。

weixin_33704234的博客 828

Spring Web MVC的异步请求解读

摘要:本文全面解析Spring Boot 3中Spring MVC的异步请求处理机制。重点介绍三种核心异步处理方式(Callable、DeferredResult和流式响应),深入剖析其工作原理与适用场景。文章还探讨了Spring Boot 3新特性虚拟线程的应用,以及异步请求中的配置、异常处理和常见问题解决方案。通过对比传统同步模型,阐述了异步处理在高并发场景下的性能优势,并提供了实用的开发建议和避坑指南。

xiaodaidai的博客 536

T100批处理作业开发

g_bgjob = ‘Y’ 后台执行g_bgjob = ‘N’ 前台执行。

weixin_43400895的博客 585

Spring MVC处理流程;

说明: (1)本篇博客合理性解释:前面介绍了SpringMVC的基本内容,包括【SpringMVC入门与数据绑定】、【Restful开发风格】、【拦截器(Interceptor)】;那么本篇博客就来总结下SpringMVC的底层原理和数据处理流程; (2)本篇博客参考的博客有:【SpringMVC 工作原理】,该文的作者是【aFa攻防实验室】; 目录 一:SpringMVC处理流程; 1.SpringMVC处理流程:分析; 2.SpringMVC处理流程:关键组件; 3....

小枯林的博客 2676

手把手教你用PLECS仿真BUCK数字电源(含DSP代码实现)

本文详细介绍了如何利用PLECS仿真软件与Visual Studio 2022搭建高保真数字电源开发环境,手把手指导从BUCK电路建模、编写硬件感知的C控制算法到参数调优的全过程。重点阐述了通过DLL接口实现软件在环仿真,模拟DSP的ADC/PWM时序,并将验证后的代码无缝迁移至TI C2000系列DSP,构建从仿真到固件的完整数字电源开发闭环,显著提升开发效率与一次成功率。

oo7890的博客 394

【Simscape】用Simscape实现三维物理仿真(三)——创建一个滑块单摆系统

1 首先创建一个Simscape Multibody 模型 (方法见 【Simscape】用Simscape实现三维物理仿真(一)——创建一个自由落体小球) 2 创建四个Solid模块 (1)摆杆 Shape : Brick Dimensions : [0.1 0.05 1] m (2)摆杆轴 Shape : Cylinder Radius : 0.02 m Le...

ReadAir的专栏 9033

MyBatisPlus与Spring MVC集成源码解读

本文深入解析MyBatisPlus与Spring Boot的集成原理,重点剖析自动配置机制和Mapper扫描机制。通过自动配置类MybatisPlusAutoConfiguration实现数据源、SqlSessionFactory等核心组件的自动装配,同时借助@MapperScan注解完成Mapper接口的扫描与代理生成。文章提供了完整的集成示例,包括项目搭建、配置文件设置、Mapper接口定义以及业务层实现,帮助开发者快速掌握集成方法并解决常见问题。

fykam的博客 1168

矩阵LED和矩阵按键

先说矩阵LED,如图: 下面以行几、列几的表达方法说明 三极管可以当做开关使用 由图可知,如果想让一个LED亮,那么它对应的行和列的三极管都要导通。如果这个矩阵每次只亮一个LED,那么正常写程序没问题。 如果我们想让LED1和LED6亮,其他灯不亮,则需要开启行1、行2、列1、列2,随之带来的问题就是LED2和LED5也会跟着亮起来。 解决方法类似于扫描,因为单片机运行速度很快,可以在很短的时间内开关数次而肉眼看不到。所以我们可以每次只亮一列(排)灯,亮单位时间后关掉同时开启另外一列(排),如此四次一循环

qq_46615634的博客 5788

Spring MVC源码解读『Spring MVC示例』

前面几篇文章,我们介绍了Servlet和Tomcat的工作原理。我们之前也说到Spring MVC底层其实也是Servlet,也需要TomcatWeb容器配合才能工作,本篇文章开始,我们就来介绍探索一下Spring MVC的相关细节。本篇文章个先来回顾一下Spring MVC的用法。 1. 什么是MVC 相信所有的开发人员都避免不了接触一个概念——MVC,这个概念是个比较抽象的概念,也没有没有官方权威定义,全凭我们开发人员自己理解。我一度感觉自己对MVC已经了解地很清楚了,但是在写本篇文章,打算来介绍M

卓立的博客 754

Reactor 响应式编程(第一篇:Reactor核心)

响应式:响应式编程: 全异步、消息、事件回调默认还是用当前线程,生成整个流、发布流、流操作.log();//只要不指定线程池,默认发布者用的线程就是订阅者的线程;

moments的博客 1571

uniapp - 超详细 H5 网页引入百度地图教程,附地图示例 / 获取当前设备定位的省市区、详细地址、经纬度信息 / 用户当前 IP 属地定位地理位置等等(新手小白快速上手,详细配置及使用全流程)

uniapp百度地图,uniapp百度地图ip属地定位,uniapp百度地图获取省市区详细地址经纬度等,uniapp百度地图当前用户设备定位省份市区详细所在地ip属地等详细教程示例,uniapp网页h5引入百度地图详细教程,uniapp h5网站使用百度地图详细教程,uniappH5端如何接入使用百度地图api,uniapp H5网页端百度地图获取地理位置信息,uniapp h5页面引入百度地图,uniapp h5平台百度地图获取城市信息,uniapp百度地图获取经纬度,uniapp 百度地图拿省市区用什么

🏆 前端领域优质创作者 6214

Spring MVC:原理、配置与基础应用详解

Spring MVC 通过精妙的设计原理、细致的配置体系以及贴合实际的应用示例,展现强大 Web 开发能力。理解其原理有助于排查问题、优化性能;掌握配置可灵活定制项目架构;实践应用能快速搭建功能模块。后续我们将深入探究其高级特性,如异常处理、拦截器、异步处理等,进一步挖掘 Spring MVC 潜力,敬请期待。

ZERO141239的博客 1416

【测开求职】面试题:计算机网络 详细版整理

本篇文章是笔者为准备研究生复试和校招而写,因此主要针对问答,注重理解,而不在于细节计算。读者可以先查看上面的链接走一遍计算机网络的整体框架结构。其中,重点难点以及易混淆的知识点,笔者会用其他文章进行了详述,在知识点处贴好了链接,有需要的可以查阅。

vector的博客 5936

spring mvc DispatcherServlet解读

spring mvc DispatcherServlet解读 DispatcherServlet的继承和实现 IDEA按快捷键:ctrl+alt+u,就可以查看DispatcherServlet的继承的类和实现的接口。 从继承图可以得知: DispatcherServlet本质是一个HttpServlet HttpServletBean,FrameworkServlet,DispatcherServlet是属于SpringMVC的类 DispatcherServlet初始化 DispatcherSer

qq_43203949的博客 702

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

解读Spring MVC项目技术架构

在Java EE开发中,Spring和Spring MVC已经是标配的基础系统架构。前面已经介绍了Spring框架,在这里主要说说Spring MVC。 实际上Spring MVC是Spring框架的一部分,Spring框架成为Java EE开发主流框架后,Spring开发小组又在Spring框架的基础上推出了MVC架构,主要用于支持WEB应用程序的开发。 MVC是Model(模型,也称为数据...

smilejiasmile的博客 1216

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

上一篇: Spring事物回滚详解
下一篇: Django添加数据库字段
xugangjava
博客等级 码龄16年 83粉丝 72原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值