孙卫琴的《精通Spring》的学习笔记:控制器对象的生命周期

本文选自孙卫琴的《精通Spring:Java Web开发技术详解》清华大学出版社出版

技术支持网址为:​​ www.javathinker.net/spring.jsp​

本书对应的直播和录播课:​​www.javathinker.net/zhibo.jsp​

​孙卫琴的QQ学习答疑群:915851077

一旦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{}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java技术集锦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值