|
本文参考《精通Spring:JavaWeb开发技术详解》,作者:孙卫琴,清华大学出版社出版
一旦Controller控制器类向SpringMVC 框架进行了注册,SpringMVC 框架就会管理Controller对象的生命周期。
默认情况下,Controller对象的存在范围为singleton(单例),即在整个应用程序的生命周期内,一个Controller类只有一个实例。
singleton范围的优点是节省内存空间,但是也存在以下两个缺点:
(1)当大量客户请求同时访问一个Controller对象的共享数据时,容易造成并发问题。
(2) 如果一个Controller对象采用了线程同步机制,那么当大量客户请求同时访问这个Controller对象时,会导致部分处理客户请求的线程阻塞,影响Web应用的并发性能。
为了克服以上缺点,SpringMVC 框架还允许把一个Controller对象的存在范围设置为request或session:
(1)request范围:对于每一个HTTP请求,Spring MVC框架创建一个Controller对象。当完成了对这个HTTP请求的响应,Controller对象就结束生命周期。
(2)session范围:对于每一个HTTP会话,Spring MVC框架创建一个Controller对象。当这个HTTP会话结束,Controller对象就结束生命周期。
在以下代码中,ControllerA和ControllerB分别使用了@RequestScope和@SessionScope注解,它们的范围分别为request和session:@Controller
@RequestScope //ControllerA的存在范围为request
public class ControllerA{}
@Controller
@SessionScope //ControllerB的存在范围为session
public class ControllerB{} |
以上@RequestScope注解等价于@Scope("request");@SessionScope注解等价于@Scope("session")。
除了request和session范围,还可以把Controller对象的存在范围设为application,这意味着在整个Web应用的生命周期内,只有一个Controller对象,例如:
@Controller
@ApplicationScope //等价于:@Scope("application")
public class ControllerA{} |
程序猿的技术大观园:www.javathinker.net
|
|