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 条评论
登录 后参与评论

相关文章

来自专栏nnngu

04 Spring的@Autowired注解、@Resource注解、@Service注解

什么是注解 传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop、事务,这么做有两个缺点: 1、如果所有的内容都配置在.xml文件中,那...

3034
来自专栏云霄雨霁

Java--Spring框架基础

1304
来自专栏Java Web

Spring(2)——Spring IoC 详解

Spring IoC 概述 IoC:Inverse of Control(控制反转) 读作“反转控制”,更好理解,不是什么技术,而是一种设计思想,就是将原本在程...

3674
来自专栏Kevin-ZhangCG

[ SSH框架 ] Spring框架学习之二(Bean的管理和AOP思想)

2085
来自专栏面朝大海春暖花开

@Autowired和@Resource的区别

@Autowired 这个是spring的注解    org.springframework.beans.factory.annotation.Autowire...

1612
来自专栏xdecode

Spring MVC注解式开发

MVC注解式开发即处理器基于注解的类开发, 对于每一个定义的处理器, 无需在xml中注册. 只需在代码中通过对类与方法的注解, 即可完成注册. 定义处理器 @C...

2748
来自专栏技术碎碎念

@RequestParam加与不加的区别

最简单的两种写法,加或不加@RequestParam注解 1 @RequestMapping("/list") 2 public String test...

3197
来自专栏Java Edge

Spring Bean的生命周期Spring简介bean对象生命周期管理

3048
来自专栏互联网大杂烩

Spring MVC组件

根据request找到相应的处理器Handler和Interceptors,HanddlerMaping接口只有一个方法,getHandler()

572
来自专栏技术碎碎念

浅谈对Spring Framework的认识

       Spring Framework,作为一个应用框架,官方的介绍如下:        The Spring Framework provides a...

2746

扫码关注云+社区