>>分享孙卫琴的Java技术专稿和著作 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 12851 个阅读者 刷新本主题
 * 贴子主题:  【Spring专题】控制器对象的生命周期 回复文章 点赞(0)  收藏  
作者:sunweiqin    发表时间:2021-10-09 12:00:41     消息  查看  搜索  好友  邮件  复制  引用

本文参考《精通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
  Java面向对象编程-->按面向对象开发的基础范例
  JavaWeb开发-->Web运作原理(Ⅲ)
  JSP与Hibernate开发-->数据库事务的概念和声明
  Java网络编程-->Socket用法详解
  精通Spring-->Vue简介
  Vue3开发-->计算属性和数据监听
  【Vue.js技术专题】Vue组件的数据监听
  【Vue.js技术专题】CSS中DOM元素的过渡模式
  【Spring Cloud Alibaba专题】GateWay的内置断言工厂
  【Spring Cloud Alibaba专题】Dubbo框架中提供者回调消费者
  【Spring Cloud Alibaba专题】OpenFeign开启对请求和响应数据...
  向小伙伴们推荐我所创作前后端编程书籍的学习顺序
  【Spring专题】用Spring框架进行文件下载
  【Spring专题】把Model的数据存放在session范围
  【持久化专题】用orphanRemoval属性映射父子关系
  【持久化专题】对象-关系的映射概念
  【Java网络编程专题】用Apache HttpClients下载网上的图片等...
  【Java网络编程专题】用java.net.URL类访问HTTP服务器读取网...
  【Java网络编程专题】通过JDBC API调用存储过程
  IT技术书写作技巧分享:慎用概念和术语
  【Java基础编程专题】Java集合与数组的互换
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。