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

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”。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

Spring之hello world(Spring入门)

spring各个版本中: 在3.0以下的版本,源码有spring中相关的所有包【spring功能 + 依赖包】 如2.5版本; 在3.0以上的版本,源...

19310
来自专栏LanceToBigData

细说log4j

可能做过java项目的基本上都是用过log4j,它是用来做java日志的。比如我们做一个项目分为很多的模块,那我们怎么想要知道它什么时候启动了,这时候我们可以使...

2225
来自专栏用户2442861的专栏

用GDB调试程序(一)

http://blog.csdn.net/haoel/article/details/2879

681
来自专栏fixzd

Dubbo项目入门

Dubbo是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。 它的特性...

822
来自专栏web编程技术分享

【Java框架型项目从入门到装逼】第七节 - 学生管理系统项目搭建

2777
来自专栏阮一峰的网络日志

Node 应用的 Systemd 启动

前面的文章介绍了 Systemd 的操作命令和基本用法,今天给出一个实例,如何使用 Systemd 启动一个 Node 应用。 本文是独立的,不需要前面的教程作...

2738
来自专栏漫漫全栈路

Windows下JavaWeb环境的安装笔记

写在前面:专升本报道开课,这个学期的课程中开了JavaWeb和Oracle数据库,作为软狗虽然一百个不愿意,但是学习为重嘛。Oracle数据库之前在吉奥实习的...

2875
来自专栏http://www.cnblogs.com

centos6.5编译安装php7

1.安装依赖软件库:   yum install -y libxml2-devel libtool* curl-devel libjpeg-devel libp...

37911
来自专栏ASP.NETCore

TinyFox在VS2015上的调试器

开源了 https://github.com/maxzhang1985/TinyFoxDEBUG

983
来自专栏微信公众号:Java团长

从零开发一个Java Web项目要点

本文章详细的列出了开发一个传统JavaWeb项目需要注意的要点,从环境准备开始到三层架构搭建,需要注意的地方全部罗列出来。

1043

扫码关注云+社区