`

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

 

--------------------- 

作者:程裕强 

来源:CSDN 

原文:https://blog.csdn.net/chengyuqiang/article/details/78776767 

版权声明:本文为博主原创文章,转载请附上博文链接!

分享到:
评论

相关推荐

    springmvc-struts

    Struts1的核心概念包括Action、FormBean、ActionServlet和配置文件(struts-config.xml),它通过配置文件来定义请求与Action的映射,以及Action如何与视图交互。Struts2是其升级版,设计更灵活,支持更多的插件和...

    maven+struts2+spring+mybatis+springMVC

    本项目"maven+struts2+spring+mybatis+springMVC"就是一个典型的Java Web应用开发组合,利用了这些框架的优势进行集成,实现了数据持久化、业务逻辑处理、视图展示以及依赖管理等多个层面的功能。 首先,我们来详细...

    maven+(springmvc,mybatis,struts2,hibernate)两两整合

    整合Struts2与MyBatis或Hibernate时,Struts2的动作类(Action)接收请求并调用Service层,Service层再通过MyBatis或Hibernate操作数据库。 整合步骤通常包括以下部分: - 配置POM.xml文件:添加所需框架的依赖。 -...

    springmvc+mybatis面试题

    SpringMVC的控制器默认是单例模式,因此在多线程环境下可能存在线程安全问题。为避免这个问题,控制器不应包含可变状态,即避免在控制器中定义实例变量。如果必须存储数据,可以使用Session或者ThreadLocal,但需...

    Struts2,JSF,SpringMVC快速入门Demo

    Struts2、JSF(JavaServer Faces)和SpringMVC都是Java Web开发中非常重要的框架,它们主要用于构建基于MVC(Model-View-Controller)架构的Web应用程序。本快速入门Demo将带你逐步了解这三个框架的基本概念、核心...

    框架面试题,集合了String,struts2,springmvc

    在本文中,我们将详细讨论框架面试题,涵盖了String、struts2和springmvc等多个方面的知识点。 首先,让我们从IOC容器开始。IOC容器是具有依赖注入功能的容器,是可以创建对象的容器。IOC容器负责实例化、定位、...

    struts1原理,struts2原理,spring mvc原理,struts1和struts2,struts和spring mvc

    3. **测试**:Spring MVC更容易进行单元测试,因为Controller通常是无状态的,而Struts2的Action有状态,测试相对复杂。 4. **社区支持**:虽然两者都有活跃的社区,但Spring MVC由于Spring框架的广泛使用,社区支持...

    sturts2、springmvc知识点

    Struts2的设计默认为多例模式。 - **数据管理**: Struts2使用值栈存储请求和响应的数据;SpringMVC则通过模型数据来管理数据。 综上所述,无论是Struts2还是SpringMVC,它们都是基于MVC设计模式的优秀框架,各有...

    springmvc+struts+mybatis项目学习

    Controller/Action处理业务逻辑,并通过MyBatis查询或更新数据库。处理完成后,将结果封装成ModelAndView或Result,然后返回给视图层进行渲染。视图通常是一个JSP或Freemarker模板,通过OGNL或EL表达式来展示数据。 ...

    某著名培训机构struts2+mybatis+springMVC整合代码

    Struts2、MyBatis和SpringMVC是Java Web开发中的三大框架,它们各自负责不同的职责,协同工作能构建出高效、灵活的企业级应用。在这个名为"某著名培训机构struts2+mybatis+springMVC整合代码"的压缩包中,你将找到一...

    springMVC使用文档

    - **实例化方式**:SpringMVC 默认使用单例模式(可配置为多例),而 Struts2 只能使用多例模式。 - **性能对比**:由于 SpringMVC 的单例模式和更轻量的设计,理论上其性能优于 Struts2。 #### SpringMVC 执行流程...

    springMVC+struts+hibernate

    Spring MVC、Struts和Hibernate是Java Web开发中的三个重要框架,它们各自负责应用程序的不同层面,协同工作以构建高效的企业级应用。Spring MVC是Spring框架的一部分,主要处理HTTP请求和响应,提供模型-视图-控制...

    struts2学习笔记

    1. **实例管理**:Struts1中Action是单例模式,而Struts2采用多实例模式,提高了线程安全性和性能。 2. **Servlet API依赖**:Struts1的Action类与Servlet API紧密耦合,限制了其灵活性和可测试性;相比之下,Struts...

    springMVC 简单操作,并且配置action

    在这个“springMVC 简单操作,并且配置action”的项目中,我们将探讨如何不依赖Struts或Hibernate等其他框架,仅使用Spring MVC来实现网站的基本功能。 首先,我们从配置开始。在Spring MVC中,`web.xml`是应用的...

    struts2+hibernate整合增删改查加注册登录Demo包含数据库自动建表语句

    Struts2和Hibernate是两种非常流行的Java Web开发框架,它们分别负责MVC(Model-View-Controller)架构中的控制层和持久层。本教程通过一个简单的Demo,展示了如何将这两个框架整合,实现基本的CRUD(创建、读取、...

    db-mapping-1.0.0

    该jar包可以根据数据库表,自动生成action(struts2)/controller(springmvc)、model、service、dao各个层的代码。 实用框架:struts2/springmvc + mybatis + spring 可根据项目需要选择: 框架类型...

    Spring4,SpringMVC,Struts,Hibernate,Maven,Mybatis学习资料

    Struts2是其最新版本,采用Model-View-Controller设计模式,提供了一套完整的解决方案,包括Action、Interceptor、Result等概念,使得开发者可以更方便地处理请求和响应。 4. Hibernate:Hibernate是一个对象关系...

Global site tag (gtag.js) - Google Analytics