`

struts2.0中Action的对象生命周期详解!!

阅读更多

struts2.0中Action的对象生命周期详解!!
有很多人问Struts2.0中的对象既然都是线程安全的,都不是单例模式,那么它究竟何时创建,何时销毁呢?

这个和struts2.0中的配置有关,我们来看struts.properties

### if specified, the default object factory can be overridden here
### Note: short-hand notation is supported in some cases, such as "spring"
###       Alternatively, you can provide a com.opensymphony.xwork2.ObjectFactory subclass name here
struts.objectFactory = spring
如果我们使用的是com.opensymphony.xwork2.ObjectFactory ,老实说,我也没有研究过,xwork有一套像spring一样的IOC机制,小巧而简洁,有兴趣的朋友可以去研究下。struts2.0中的Action默认就是使用这种工厂模式的,我们来看

    <action name="index" class="hdu.management.action.IndexAction">
        <result name="success">/input.jsp</result>
        <result name="testFTL" type="freemarker">/ftl/test.jsp</result>
    </action>
class属性必须写类的全名,通过这种方式配置后,action对象的生命周期到底怎么样,你就认命吧,反正你就记住xwork有一个对象池,它会自己分配的,应对每次客户端的请求,它都会创建一个新的实例,至于这个实例何时销毁,由XWORK来控制。


接下来,我们用spring来控制action的生命周期,关于action和spring的集成,我这里就不累述了。

    <action name="index" class="index">
        <result name="success">/input.jsp</result>
        <result name="testFTL" type="freemarker">/ftl/test.jsp</result>
    </action>
这里的class是spring配置文件中bean的id

我们来看看spring文档中关于生命周期这个章节


Table 3.4. Bean scopes

Scope Description
singleton
Scopes a single bean definition to a single object instance per Spring IoC container.

prototype
Scopes a single bean definition to any number of object instances.

request
Scopes a single bean definition to the lifecycle of a single HTTP request; that is each and every HTTP request will have its own instance of a bean created off the back of a single bean definition. Only valid in the context of a web-aware Spring ApplicationContext.

session
Scopes a single bean definition to the lifecycle of a HTTP Session. Only valid in the context of a web-aware Spring ApplicationContext.

global session
Scopes a single bean definition to the lifecycle of a global HTTP Session. Typically only valid when used in a portlet context. Only valid in the context of a web-aware Spring ApplicationContext.

 

是不是一目了然?

当然我们要使用request、session等,必须在web.xml中配置

<web-app>
...
<listener>
    <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
...
</web-app>
准备好这些之后,我们来对request这个scope进行下测试

<beans>
   
    <bean id="index" class="hdu.management.action.IndexAction"
        scope="request"
        destroy-method="destroy"
        init-method="init"/>
   
</beans>
配置好后,发现每次刷新页面,都会建立一个新的实例,运行完后就销毁这个实例,这个效果和默认的是一样的,只是我们这个运行完后会立即销毁,而默认的不是立即销毁,由xwork优化销毁

如果设置为session,其实相当于ejb中的状态bean,对于每个session来说用的都是同一个实例,当然,一旦把浏览器关闭,或者超时,对象就会销亡。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/wxy_G/archive/2008/01/29/2071662.aspx

分享到:
评论

相关推荐

    struts2.0+spring+hibernate开发示例

    5. 在Struts2.0的Action中,通过Spring的依赖注入获取持久层对象,执行数据库操作。 6. 配置Web应用的部署描述符(`web.xml`),初始化Struts2.0和Spring的监听器。 完成上述步骤后,我们就可以通过SSH实现一个完整...

    三大框架SSH(struts2.0+spring+hibernate)整合

    IoC通过容器管理对象的生命周期和依赖关系,实现解耦;AOP则允许开发者定义横切关注点,如事务管理、日志记录等,提高代码复用性。Spring还提供了数据访问集成,支持JDBC、Hibernate、MyBatis等,以及Web MVC框架,...

    jquery easyui 项目 +hibernate+spring+struts2.0

    在本项目中,Spring将作为核心容器,管理各个组件的生命周期和依赖关系,并可与Hibernate集成,提供数据访问服务。 4. Struts2.0:Struts2是一个基于MVC设计模式的Web框架,它简化了Java Web应用的开发。Struts2...

    ssh整合代码(struts2.0+hibernate+spring)

    - **applicationContext.xml**:Spring的核心配置文件,用于管理Bean的生命周期和依赖注入。 - **web.xml**:Web应用的核心配置文件,用于配置Servlet容器的初始化参数、监听器等。 ### 关键配置文件详解 #### ...

    整合struts+hibernate+spring应用开发详解 part1

    Spring的IoC容器负责管理对象的生命周期和依赖关系,使得代码更加松耦合。Spring还提供了与Hibernate的集成,可以方便地将两者结合在一起使用,减少了手动配置和数据访问的复杂性。 在这个教程的第二章,可能涵盖了...

    Struts框架详解

    此外,ActionServlet还负责加载配置文件(`struts-config.xml`),初始化框架并管理生命周期。 2. **ActionClass**(模型):包含业务逻辑的类,通常继承自`Action`类。Action对象负责处理用户请求并将其转发给...

    Struts2配置详解

    Struts2框架也内置了对IoC的支持,允许开发者在配置文件中定义和管理Bean的生命周期。通过`&lt;bean&gt;`标签,开发者可以指定Bean的类名、名称以及其他配置属性。 示例代码中的`&lt;bean&gt;`配置如下: ```xml ...

    struts.properties详解

    默认值为`spring`,这意味着默认情况下Struts2会使用Spring框架来管理对象的生命周期。 - **struts.objectFactory.spring.autoWrite**:指定Spring框架的自动装配模式,默认值为`name`,即默认按照Bean的名称进行...

    struts2-action.pdf

    ### Struts2中Action的理解与应用 #### 一、Action定义及作用 在Struts2框架中,...通过对Action生命周期、接口定义、核心元素的深入理解,开发者能够更好地掌握如何利用Struts2框架构建高效稳定的Web应用系统。

    spring管理struts的action的代码

    这样做的好处在于,Action实例的生命周期和依赖关系都可以由Spring容器来管理,提高了代码的复用性和可测试性。 #### 三、配置Spring容器 在Web应用中配置Spring容器的关键步骤之一是在`web.xml`文件中配置...

    Struts 2 技术详解:基于WebWork核心的MVC开发与实践

    **Struts 2的生命周期**: 1. 用户发起HTTP请求。 2. Struts 2 框架接收到请求,解析请求参数。 3. 拦截器链开始执行,按照配置顺序逐个调用拦截器。 4. 当拦截器链执行完毕,Action被实例化并执行对应的execute方法...

    struts2深入详解

    10. **生命周期管理**:了解Action实例的生命周期对于优化性能至关重要。`ch19`可能详细讨论了Struts2中Action的创建、初始化、执行和销毁过程。 11. **测试与调试**:Struts2提供了Action测试框架,便于单元测试和...

    Hibernate3.2_spring2.0_struts2(汉化API)

    《Java框架整合:Hibernate3.2、Spring2.0与Struts2的汉化API详解》 在Java开发领域,Hibernate、Spring和Struts2是三个非常重要的框架,它们分别在对象关系映射(ORM)、依赖注入(DI)以及MVC架构方面提供了强大...

    Struts+Sping+HIbernate整合入门详解

    2. **Spring**作为一个容器,负责管理各个组件的生命周期和依赖关系,包括Struts中的Action、Hibernate中的DAO层以及其他服务层组件。 3. **Hibernate**则负责持久化层的操作,处理数据的存储和检索,将业务逻辑处理...

    Struts2 In Action

    - Action的生命周期 - 如何创建自定义Action类 - Action的结果处理 - **第4章:通过拦截器增加工作流**(第74页起) - **章节概述**:这一章介绍了Struts2的拦截器机制,这是一种非常强大的功能,可以用来扩展...

    Struts+Spring+Hibernate整合入门详解

    2. **Spring**: Spring 是一个轻量级的IoC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)容器,它可以管理对象的生命周期和依赖关系。在整合中,Spring作为核心框架,负责...

Global site tag (gtag.js) - Google Analytics