`
langgufu
  • 浏览: 2307135 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

struts+spring action应配置为scope="prototype"(转)

阅读更多

struts+spring action应配置为scope="prototype"

<bean id="personAction" scope="prototype" class="quickstart.action.PersonAction">
        <constructor-arg ref="personService" />
</bean>

在配置文件中,bean默认是单例模式,应用服务器启动后就会立即创建bean,以后就可以重复使用。
这带来一个问题,bean的全局变量被赋值以后,在下一次使用时会把值带过去。也就是说,bean是有状态的。
在web状态下,请求是多线程的,全局变量可能会被不同的线程修改,尤其在并发时会带来意想不到的bug。
而在开发时,访问量很小,不存在并发、多线程的问题,程序员极有可能会忽视这个问题。
所以在配置action bean时,应使用scope="prototype",为每一次request创建一个新的action实例。这
符合struts2的要求,struts2为每一个request创建一个新的action实例。当request结束,bean就会被jvm
销毁,作为垃圾收回。
当然,也可以设置scope="session",也能避免web中action的并发问题,只为当前用户创建一次bean,直至
session消失。在这种情况下,对当前用户而言,bean是有状态的。好处就是少创建bean的实例,有那么一
点点性能的提升
应用场景:
    1. 多数情况下应使用prototype
    2. 若用户不多,且频繁操作(频繁使用action),硬件一般,可以考虑session,兴许还能提升一点点性能。

分享到:
评论

相关推荐

    maven3+struts2+spring+ibatis

    这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...

    maven3.0+struts+spring+hibernate

    这个属于与Spring整合的问题,Spring容器在初始化对象的时候会根据bean的scope配置来考虑是重新建立一个对象,还是继续使用原来的对象,拿struts2的action的bean来说,如果scope这个参数没有配置,默认就是单例,即...

    SSH整合 struts+hibernate+spring

    - Spring默认使用单例模式管理Bean,需要多例时需设置`scope`属性为`"prototype"`。 #### 三、使用AOP进行整合 **AOP(Aspect Oriented Programming,面向切面编程)** 是Spring提供的另一种强大功能,它可以用来...

    struts+spring+hibernate面试题.doc

    - **Spring的Scope="Prototype"管理**:利用Spring的bean管理功能,将Action的scope设置为"prototype",确保每次请求都会创建一个新的Action实例。 ### 2. Struts的MVC实现 Struts框架遵循经典的Model-View-...

    struts2+hirbate+spring面试题

    确保Action线程安全的方法包括:声明局部变量、扩展RequestProcessor以每次创建新的Action实例,或者在Spring中使用`scope="prototype"`配置来管理Action。 2. **Struts2的MVC实现** 在Struts2中: - **Model**:...

    收集的struts+spring+hibernate面试题.doc

    - 在 Spring 中使用 `scope="prototype"` 来管理 Action 的生命周期,确保每个 HTTP 请求都有一个新的 Action 实例。 #### 4. Struts 如何实现 MVC 模式 Struts 采用 MVC 架构模式来组织应用程序结构: - **Model...

    struts2+spring整合

    - 在Spring配置文件中定义Action类及其依赖,Action类通常配置为`scope="prototype"`,以确保每次请求都能获得一个新的实例。 - 在Struts2的配置文件(通常是struts.xml)中,指定`&lt;action&gt;`元素的`class`属性为...

    struts2+hibernate+spring整合

    4. 在Spring配置文件中定义Action类Bean,并设置为原型(prototype)作用域。 5. 配置Hibernate的SessionFactory和DataSource。 在实际开发中,我们通常按照数据库层(POJO和Hibernate映射)、数据访问层(DAO)、...

    收集的struts+spring+hibernate面试题借鉴.pdf

    确保Action线程安全的方式包括使用局部变量、每次请求时创建新的Action实例(例如通过Spring的`scope="prototype"`配置),或者扩展`RequestProcessor`以实现线程局部存储。 4. MVC模式在Struts中实现如下:Model由...

    Struts 1.3.10+Spring3.0.5+Mybatis3.1.1框架整合全部jar包

    2. **Spring与Struts的集成**:使用Spring的Struts插件,将Action类的实例交给Spring容器管理,通过`&lt;bean&gt;`标签定义Action类并设置scope为prototype,保证每次请求都创建新的Action实例。 3. **Spring与Mybatis的...

    Struts2+Spring3+Hibernate3整合文档

    为了与Struts2保持一致,需要将Action的Scope设置为`prototype`或`session`。 - **`prototype`**:为每个请求创建一个新的Action实例。 - **`session`**:为每个会话创建一个新的Action实例。 示例配置如下: ```...

    struts2.2.3+spring3.1.0+hibernate4.0整合

    整合Struts2和Spring,首先需要在Struts2的配置文件`struts.xml`中添加Spring插件,这样Struts2可以通过Spring来管理Action类。接着,将Action类声明为Spring的bean,并在Spring的配置文件`applicationContext.xml`...

    struts2+spring+hibernate整合中spring注入出错。页面中报空指针异常。高手来看看怎么决绝。

    1. **配置错误**:检查Spring的配置文件(如`applicationContext.xml`),确保所有需要被注入的对象(如Service、DAO)都有对应的bean定义,并且正确设置了`scope`属性(通常为`prototype`或`singleton`)。...

    struts2+spring3+hibernate3整合源码包

    - 配置Spring:在applicationContext.xml中定义Action类作为bean,设置其scope为prototype,因为每个请求都需要一个新的Action实例。 - 配置Hibernate:在hibernate.cfg.xml中设置数据库连接信息,配置实体类和...

    Spring+Struts+Hibernate开发手册.doc

    @Scope("prototype") public class UserAction extends WebBaseAction implements ModelDriven&lt;User&gt; { @Autowired private UserService userService; private User user; public User getModel() { return...

    web上传进度条(struts2+spring)

    在Spring的配置文件中,我们需要声明`UploadAction`为一个bean,并指定其scope为prototype,因为每次HTTP请求都需要一个新的实例。 在实现上传功能时,我们会用到Servlet 3.0提供的异步处理能力。通过开启Servlet的...

    基于Annotation的Struts2.0+Hibernate3.3+Spring2.5整合开发

    接着,`@Controller`和`@Scope("prototype")`是Spring的注解,它们标记`RegisterAction`为一个Spring的控制器组件,并设置其作用域为原型(prototype),意味着每次请求都会创建一个新的实例。`@Resource(name=...

    struts+hibernate,spring面试题

    为了确保线程安全,可以避免使用类变量,或者在Spring中将Action配置为原型(`scope="prototype"`),这样每次请求都会创建一个新的Action实例。 2. **Struts实现MVC**: 在Struts框架中,Model由JavaBean或EJB...

    Myeclipse下整合springstruts2

    在`struts.xml`文件中,我们需要指定使用Spring作为对象工厂,这允许Struts2从Spring容器中获取Action实例。添加以下关键代码: ```xml &lt;constant name="struts.objectFactory" value="spring" /&gt; &lt;package name...

    图解SSH(struts2,spring,hibernate)框架配置步骤

    在 `struts.xml` 文件中,将 Action 类的配置改为引用 Spring 中的 Bean ID,如: ```xml &lt;action name="login" class="loginAction"&gt; ``` 这样,Struts2 就会通过 Spring 获取 Action 实例。 ### 2. Spring 与 ...

Global site tag (gtag.js) - Google Analytics