有很多人问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来说用的都是同一个实例,当然,一旦把浏览器关闭,或者超时,对象就会销亡。
分享到:
相关推荐
Spring2作为一个轻量级的容器框架,负责管理对象的生命周期和依赖关系。它采用了IoC(控制反转)和AOP(面向切面编程)的理念,使得各个模块之间的耦合度降低,提高了系统的可重用性和可维护性。整个系统包括了用户...
我们假定阅读此书的读者熟知 Java 语法,应用开发生命周期,以及面向对象设计概念。 关于关系数据库的基础,加上JDBC技术,我们建议掌握,但不是必需。 那么我们的注意力将着眼于Web应用和Struts框架。 技术之间...
Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了代码的耦合度。Hibernate作为ORM框架,负责将对象与数据库表进行映射,简化了数据库操作。其次,该系统使用Jsp作为前端展示层,提供了丰富的用户界面和...
在JavsSE中,main方法为应用提供了入口,而在Android中,我们可以使用Application对于整个应用的生命周期进行管理,那么在基于Struts2的JavaEE应用中,如何实现类似的功能呢。 其中一种比较好的方式,是通过实现...
Spring2作为IoC容器,负责管理对象的生命周期和依赖关系,降低了系统各模块之间的耦合度,提高了系统的可维护性。DWR作为Ajax框架,负责实现前后端的数据交互,提供了丰富的API,使得开发者能够轻松地实现各种复杂的...
6.2.4 bean的作用域与生命周期 374 6.2.5 基于xml方式的bean装配 376 6.2.6 基于annotation方式的bean装配 381 6.2.7 基于xml方式的aop实现 386 6.2.8 基于annotation方式的aop实现 391 6.3 spring 2.5事务管理...
Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了各个模块之间的耦合度。Oracle作为关系型数据库,存储了车辆管理系统所需的各种数据。这个车辆管理系统实现了车辆信息的录入、查询、修改和删除等功能...
这是一个基于SSM框架开发的固定资产管理系统,该系统可以实现对公司固定资产的全生命周期管理,包括资产采购、领用、报废、维修等操作。 系统采用B/S架构,用户可以通过浏览器访问网站进行操作,也可以使用移动端...
Spring 是一个轻量级的依赖注入容器,它提供了一种灵活的方式来管理对象的生命周期和依赖关系。通过结合这三个框架,这个博客系统实现了一个完整的博客平台的功能。它包括了用户注册、登录、发布文章、评论、分类...
各种ActionForm用法,生命周期,所有标签的使用
例如,对于生命周期为一个用户会话的数据来说,Httpsession是非常合适的。与之对应的,跨越多个session,或者多个用户的持久化则需要一个数据库来保持。数据的数量是另一个非常重要的衡量标准。例如
Spring作为IoC容器,负责管理对象的生命周期和依赖关系,降低了系统各模块之间的耦合度。Ext作为前端框架,提供了丰富的界面组件和交互效果,使得系统界面美观且易于使用。这个资料包包含了系统的全部源代码,包括...
Spring作为IoC容器,负责管理对象的生命周期和依赖关系,使得系统的各个模块能够灵活地组合和替换。该系统的主要功能包括:车辆信息的增删改查,包括车辆的类型、车牌号、颜色、购买日期等;用户信息的增删改查,...
5.1 ActionForm的生命周期 10 5.2 ActionForm的作用 11 5.3 ActionForm的实践 11 5.4 组装ActionForm 11 5.5 Struts的动态表单的应用 11 第2篇 struts的执行 12 第6章 理解ActionForward 12 6.1 ActionForward 的...
Spring技术 Spring Ioc基础、Ioc注入技巧、对象高级装配(自动装配、模板装配、组件扫描特性、FactoryBean、对象生命周期)、Spring AOP原理、AspectJ、Spring JDBC支持、Spring事务及安全管理;Spring整合Hibernate...
集成框架 ...Struts作为系统的整体基础架构,负责MVC的分离,Hibernate框架对持久层提供支持,而Spring则贯穿整个生命周期,管理Struts和Hibernate。这种框架组合简化了开发过程,提高了开发效率。
3.7.1 application的生命周期 3.7.2 application中数据的操作 3.7.3 Web应用初始化参数的配置 3.7.4 application对象应用示例 3.8 其他内置对象的应用 3.8.1 应答与请求的page对象 3.8.2 页面上下文的page Context...
《JavaServer Faces 2.0完全参考手册》对所有jsf功能都进行了解释,包括请求处理生命周期、托管bean、页面导航、组件开发、ajax、验证器、国际化和安全。贯穿全书的专家组意见提供了关于jsf设计的内部信息。 推荐...