`
yingxiongwudi
  • 浏览: 58719 次
  • 性别: Icon_minigender_1
  • 来自: 郑州
社区版块
存档分类
最新评论

action由spring管理带来的单实例问题

    博客分类:
  • java
阅读更多
由Spring管理的Struts2的Action的单实例问题(转)(2009-05-10 10:38:57)标签:杂谈   

背景 :




1) Struts2 会对每一个请求,产生一个Action的实例来处理.

2) Spring的Ioc容器管理的bean默认是单实例的.




当Struts2与Spring整合后,由spring来管理Struts2的Action,会遇到什么问题 ?如何解决 ?

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





会遇到什么问题?




Struts2与Spring整合后, 由spring来管理Struts2的Action,   bean默认是单实例有情况下,会有如下问题:

1) Action是单例,其中的FieldError,actionerror中的错误信息 会累加, 即使再次输入了正确的信息,也过不了验证.

2) Struts2的Action是有状态的,他有自己的成员属性, 所以在多线程下,会有问题.





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



如何解决?




方案一: 就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例.




方案二: spring中bean的作用域设为session ,每个session对应一个实例,解决了多线程问题.(如何设置作用域请看: 4 spring中bean的作用域 )

再写一个拦截器,  清空 FieldError与actionerror



Java代码
源自网络   
  
public class ClearFieldErrorInterceptor extends AbstractInterceptor {   
  
@Override  
public String intercept(ActionInvocation invocation) throws Exception {   
ActionSupport actionSupport = (ActionSupport)invocation.getAction();   
actionSupport.clearErrorsAndMessages();   
String resultCode = invocation.invoke();   
return resultCode;   
}   
源自网络 public class ClearFieldErrorInterceptor extends AbstractInterceptor { @Override public String intercept(ActionInvocation invocation) throws Exception { ActionSupport actionSupport = (ActionSupport)invocation.getAction(); actionSupport.clearErrorsAndMessages(); String resultCode = invocation.invoke(); return resultCode; }
 
-------------------------------------------------------------------------------------




总结 :



方案一 , bean的作用域设为prototype,  担心性能不好, 但没实际测试过,不好说话,也只是担心而已.




方案二:  由于对方案一有担心, 所有才有了方案二, 不知比方案一性能能高多少

分享到:
评论

相关推荐

    spring管理struts的action的代码

    这行配置告诉Struts框架使用Spring作为对象工厂,这意味着所有的Action实例都将由Spring容器来创建和管理。这样一来,Action类就无需实现特定的接口或继承特定的基类,可以保持其原有的简洁性。 #### 五、示例:...

    spring boot 小实例

    Spring Boot 是一个由 Pivotal 团队开发的框架,旨在简化 Spring 应用程序的初始搭建以及开发过程。它提供了预配置的依赖项和自动配置功能,使得开发者可以快速地创建独立运行的、生产级别的基于 Spring 的应用程序...

    struts2+hibernate+spring+ibatis 小实例

    struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+hibernate+spring+ibatis 小实例struts2+...

    spring in action的jar包

    这个"spring in action的jar包"很可能是书中提到的一些必要的库文件,用于配合书中的实例代码运行。这些jar包是Spring框架的组成部分,包括了Spring的核心模块和其他可能依赖的第三方库。 在Spring框架中,主要包含...

    Struts2+Spring演示实例源代码

    - **Spring Bean**:由Spring管理的对象,生命周期和依赖关系都由Spring容器控制。 3. **Struts2与Spring的整合**: - **Spring插件**:Struts2提供了一个Spring插件,使得Spring管理的Bean可以直接作为Struts2的...

    struts2_mybatis_spring_框架实例整合_数据库 文档

    Struts2、MyBatis和Spring是Java Web开发中常用的三大框架,它们分别负责MVC模式中的Action层、数据持久层和应用上下文管理。这篇文档将深入探讨如何将这三个框架整合在一起,以及如何结合数据库进行实际应用。 ...

    一个Spring的入门实例;一个Struts的入门实例

    Spring 和 Struts 是两个在Java Web开发中广泛使用的框架,它们各自解决了一些核心问题并促进了应用程序的构建。这里我们将深入探讨这两个框架的基本概念、工作原理以及如何创建一个入门实例。 **Spring 框架** ...

    Spring in Action 使用Maven 构建Spring 工程

    《Spring in Action》一书是Spring框架的实践指南,它深入介绍了如何使用Maven构建Spring工程。Maven是一个流行的项目管理和综合工具,它通过提供一套标准化的构建过程,简化了Java项目的构建、依赖管理和部署。在...

    spring实例(经典推荐)SpringMVCDemo.rar

    Spring通过实现ActionSupport类或使用自定义的Action类,可以轻松地将Struts的Action纳入其管理范围。 Hibernate则是Java领域的一个持久层框架,用于处理数据库操作。在SpringMVCDemo中,Spring与Hibernate的结合...

    Struts2、Spring和Hibernate应用实例

    整合Struts2、Spring和Hibernate,通常会利用Spring作为核心容器,管理所有对象,包括Struts2的Action和Hibernate的SessionFactory。Spring可以配置Struts2的Action,实现依赖注入,而Hibernate的SessionFactory可以...

    Struts2_Spring_Hibernate整合开发实例

    Action类通常会被Spring管理,通过注解或XML配置文件进行依赖注入。同时,Struts2的拦截器可以与Spring的AOP相结合,实现更灵活的业务逻辑控制。 其次,Spring的角色在于统一管理整个应用程序的组件,包括Struts2的...

    利用spring管理strurs里的Action

    3. **解耦合**:Action的创建和管理由Spring负责,与Struts的配置分离,增强了系统的灵活性。 4. **AOP支持**:可以利用Spring的AOP功能实现事务管理、日志记录等横切关注点。 综上所述,结合Spring和Struts,我们...

    JPA+Spring+Struts整合实例,JPA+Spring+Struts整合实例

    **JPA+Spring+Struts整合实例** 整合JPA、Spring和Struts的主要目标是实现数据访问层(DAO)、业务逻辑层(Service)和表示层(View)的有效协同工作。 **1. 配置环境** 首先,确保你的项目中包含了这三个框架的...

    spring in action & 精通spring

    《Spring in Action》和《精通Spring》是两本深度探讨Spring框架的重要书籍,它们为开发者提供了全面、深入的Spring技术指南。Spring是一个广泛使用的Java企业级应用开发框架,以其依赖注入(Dependency Injection, ...

    struts+spring+hibernate ssh框架一个实例

    这些DAO类也可以由Spring管理,通过@Autowired注解自动注入SessionFactory。 6. 视图展示:在JSP页面上,通过Struts标签库显示数据,如struts2-dojo-plugin或struts2-jquery-plugin,可以方便地实现Ajax功能,增强...

    Struts+Spring+Hibernate开发实例 (SSH整合)

    Struts、Spring、Hibernate(SSH)是Java Web开发中三个非常重要的开源框架,它们分别用于MVC模式的实现、依赖注入和持久化管理。SSH整合是将这三个框架结合在一起,以构建更高效、可维护性更强的企业级应用。本文...

    Spring MVC 入门实例

    如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring MVC 的基本概念. 基于 Spring 的 Web 应用...

    spring管理struts和hibernate

    - 使用Spring的`<bean>`元素来创建Struts Action的实例,同时可以利用Spring的依赖注入特性来管理Action与其他组件之间的依赖关系。 2. **简化开发流程**: - 通过Spring管理Struts中的Action,可以减少大量的...

    Spring+in+action+中文版(第4版)

    这本书是Spring框架开发的必备指南,从基础知识到高级应用都有涉及,并且配有大量的实例帮助读者理解和掌握Spring框架的核心概念和技术。 ### 一、Spring 概览 #### 1.1 Spring 的起源与发展 - **1.1.1 Spring ...

Global site tag (gtag.js) - Google Analytics