Spring MVC 中控制器的生命周期

Posted

技术标签:

【中文标题】Spring MVC 中控制器的生命周期【英文标题】:Controller's life-cycle in Spring MVC 【发布时间】:2010-12-01 16:56:12 【问题描述】:

Spring MVC 中 Controller 的生命周期是什么?

控制器何时创建,何时销毁?它是否在多个线程之间共享?是否可以同时被多个请求使用。

【问题讨论】:

【参考方案1】:

这是生命周期的视图:

http://www.flickr.com/photos/60896767@N00/89101625/sizes/l/

是的,它们由线程/请求共享;你应该把它们写成线程安全的。他们应该是无国籍的。通常他们有一个对完成所有工作的 Spring 服务的引用。控制器处理 Web 层的绑定、验证和路由。

【讨论】:

【参考方案2】:

Spring MVC 的所有控制器都是单例的。与其他普通的单例 bean 一样,控制器实例将在 Web 应用程序上下文启动后创建,并在其结束前释放。

即使你为控制器 bean 定义指定了其他范围(例如原型),因为 spring 为控制器提供了某种缓存以提高性能,只有第一个获取的控制器实例会被重复使用。

【讨论】:

【参考方案3】:

控制器只是 bean,它们可以是单例或原型,这取决于您要做什么。如果你想要有状态使用原型,默认情况下它们是单例的。

http://www.digizenstudio.com/blog/2006/10/09/spring-controllers-with-prototype-scope/

【讨论】:

以上是关于Spring MVC 中控制器的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC 中 Web 请求生命周期的开始和结束

ASP.NET MVC 生命周期

为啥没有适用于 python 的 Spring DI(组件生命周期)框架?

关于spring mvc 请求参数校验使用中的坑 。 maven 生命周期,线程池杂识

Spring 框架源码 Bean的生命周期全流程源码解析

Spring 框架基础(02):Bean的生命周期,作用域,装配总结