SpringMVC初写(三)Controller的生命周期
Spring框架默认创建的对象的方式是单例,所以业务控制器Controller也是一个单例对象
由此可证明,无论是同一次请求还是同一次会话和不同请求它的对象都是相同的
然而由于对象是单例的,随之而来的产生了两个问题:
- 请求数据如果放在成员变量上面,会相互影响。
- 在处理请求比较多的时候,请求使用同一个对象处理,会导致阻塞
SpringMVC提供了request,session两个生命周期处理上述的问题
request:每次新的请求,创建一个实例
session:每次会话创建一个新的实例,就是同一个浏览器,就使用同一个实例
每个请求创建一个实例,类似多例“prototype”
由于每次请求都会产生新的对象,对内存的消耗比较大一般不推荐使用
每次会话(Session),创建一个实例
相同浏览器访问默认为同一个会话(Session)
注意事项:在配置request,session生命周期时,需要在配置文件中加入<mvc:annotation-driven />标签,因为由于历史原因,SpringMVC的内核是使用XML编写的,而注解的支持类似系统不定的方式加入到框架里面,后来出现了很多注解有,而配置文件没有的功能,这些功能就通过<mvc:annotation-driven />标签扩展加入。
常用依赖该标签的功能如下:
- 作用域request、session的支持
- 放开静态资源的访问
- 上传组建的支持
- JSON的支持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异