前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Struts2的Action是单例还是多例 / SpringMVC的controller默认是单例还是多例?

Struts2的Action是单例还是多例 / SpringMVC的controller默认是单例还是多例?

作者头像
程裕强
发布2018-01-02 16:55:07
1.8K0
发布2018-01-02 16:55:07
举报

Struts2的Action是单例还是多例?

Spring的controller默认是单例还是多例?

1、默认单例

SpringMVC默认是单例的。与Struts2不同,SpringMVC没有默认处理方法,也就是说SpringMVC是基于方法的开发,都是用形参接收值,一个方法结束参数就销毁了,多线程访问都会有一块内存空间产生,里面的参数也是不会共用的。由于SpringMVC默认使用了单例,所以Controller类中不适合定义属性,只要controller中不定义属性,那么单例完全是安全的。单例模式可以提高SpringMVC性能,不需要每次相应请求都创建一个对象。

此外,Spring的Ioc容器管理的bean默认是单实例的

2、多例

在特殊情况,需要在Controller类定义属性时,单例肯定会出现竞争访问,需要在类上面加上注解@Scope(“prototype”)改为多例的模式。

3、Struts2

与SpringMVC不同,Struts2是基于类的属性进行发的,定义属性可以整个类通用。所以Struts2的Action是多实例的并非单例,也就是每次请求产生一个Action的对象。Action类中往往包含了数据属性,例如在页面填写的form表单的字段,Action中有对应的的属性来绑定页面form表单字段。显然如果Action是单实例的话,那么多线程的环境下就会相互影响,例如造成别人填写的数据被你看到了。

但是什么有人说Struts2的Action 默认是单例的?而且还可以进行配置呢?

因为在和Spring一起使用的时候,Action交给Spring进行管理,默认的就是单例,所以才会有人说Struts2默认是单例的。

所以在Spring整合Struts2开发时,如果需要用使用Struts2多例,就在spring的action bean配置的时候设置scope=”prototype”。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Struts2的Action是单例还是多例?
  • Spring的controller默认是单例还是多例?
  • 1、默认单例
  • 2、多例
  • 3、Struts2
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档