spring mvc源码学习笔记之二

news/2025/1/8 3:59:29/
  • pom.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.qs.demo</groupId><artifactId>test-010</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>4.3.30.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency></dependencies></project>
  • src/main/webapp/WEB-INF/web.xml 内容如下
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>app</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextClass</param-name><param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value></init-param><init-param><param-name>contextInitializerClasses</param-name><!-- 值可以用逗号、分号、换行分割 --><param-value>com.qs.demo.A_ApplicationContextInitializer</param-value></init-param><!-- 小小优化,加快首次访问速度 --><load-on-startup>0</load-on-startup></servlet><servlet-mapping><servlet-name>app</servlet-name><!-- / 表示除了 xxx.jsp 之外的所有请求 --><!-- /* 表示所有请求 --><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
  • com.qs.demo.A_ApplicationContextInitializer 内容如下
package com.qs.demo;import org.springframework.context.ApplicationContextInitializer;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;/*** @author qs* @date 2024/09/24*/
public class A_ApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {@Overridepublic void initialize(ConfigurableApplicationContext applicationContext) {System.out.println(this.getClass().getName() + " 参考 ContextLoader ");((AnnotationConfigWebApplicationContext) applicationContext).register(Conf.class);}
}
  • com.qs.demo.Conf 内容如下
package com.qs.demo;import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;/*** @author qs* @date 2025/01/03*/
@Configuration
@ComponentScan(basePackages = {"com.qs.demo"})
public class Conf {}
  • com.qs.demo.FirstController 内容如下
package com.qs.demo;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author qs* @date 2024/12/20*/
@Controller
public class FirstController {@RequestMapping("/t01")@ResponseBodypublic void t01() {System.out.println("---------> " + System.currentTimeMillis());}@RequestMapping("/t02")@ResponseBodypublic String t02() {return "---------> " + System.currentTimeMillis();}}

以上就是全部代码

写这个例子主要是看名为 contextClass 的 servlet init-param 的用法。
在上面的例子中,我们用 contextClass 指定了使用 AnnotationConfigWebApplicationContext。
同时还使用 contextInitializerClasses 指定了用 com.qs.demo.A_ApplicationContextInitializer 来在应用上下文刷新之前对其进行自定义配置。


http://www.ppmy.cn/news/1561163.html

相关文章

如何备份和恢复 PostgreSQL 数据库 ?

对于数据库管理员和开发人员来说&#xff0c;在 PostgreSQL 中创建数据库副本是一项至关重要的任务。此过程对于测试、备份、数据分析等都是必不可少的。在本指南中&#xff0c;我们将深入研究创建 PostgreSQL 数据库副本的步骤&#xff0c;以确保数据完整性和系统性能。 必要…

Java协程的引入会导致GC Root枚举复杂度大大增加,JVM是如何解决的呢?

Java协程与GC的爱恨情仇 - JVM是如何化解性能危机的&#xff1f; GC本是好好工作&#xff0c;但协程的加入&#xff0c;却让它被迫卷入了一场复杂的性能考验。不过&#xff0c;JVM 团队也给出了解决方案&#xff0c;化繁为简&#xff0c;让这对“矛盾CP”握手言和。 协程和 G…

pygame飞机大战

飞机大战 1.main类2.配置类3.游戏主类4.游戏资源类5.资源下载6.游戏效果 1.main类 启动游戏。 from MainWindow import MainWindow if __name__ __main__:appMainWindow()app.run()2.配置类 该类主要存放游戏的各种设置参数。 #窗口尺寸 #窗口尺寸 import random import p…

Pytorch库结构是什么样的

Pytorch是一个用于深度学习的开源框架&#xff0c;具有高度的灵活性和易用性&#xff0c;它的库结构比较丰富&#xff0c;包含了多种模块&#xff0c;用于张量支持张量操作、神经网络搭建、优化、自动求导等任务。以下是Pytorch的核心库结构和主要组成部分。 1、核心库&#x…

Qt 下位机串口模拟器

使用 vspd 创建虚拟配对串口&#xff0c;Qt 实现下位机串口模拟器&#xff0c;便于上位机开发及实时调试&#xff0c;适用字符串格式上下位机串口通信&#xff0c;数据包格式需增加自定义解析处理。 通过以下链接下载 vspd 安装包&#xff0c;进行 dll 破解。 链接: https://…

Selenium 自动化,如何下载正确的 ChromeDriver

在 Python 的 Selenium 自动化操作中&#xff0c;chromedriver 是不可或缺的驱动程序。没有正确安装对应版本的驱动&#xff0c;运行代码时常常会遇到报错问题&#xff0c;比如 “session not created: This version of ChromeDriver only supports Chrome version XX”。 今天…

[Qt] 信号和槽(2) | 多对多 | disconnect | 结合lambda | sum

目录 1. 带参数的信号和槽 重载信号槽 参数列表匹配规则 信号参数多于槽的情况 2. 信号与槽的连接方式 ⭕ 信号槽 的意义 3. 信号和槽的其他说明 1. 信号与槽的断开 2. Qt4 版本信号与槽的连接 Qt4 优缺点 3.Lambda 定义槽函数 语法格式 槽函数使用 Lambda 信号与…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知&#xff0c;js不擅长计算&#xff0c;计算是同步的&#xff0c;大规模的计算会让js主线程阻塞&#xff0c;导致界面完成卡死。比如有一个600多亿次的计算&#xff0c;…