struts2单独使用时,Action实例由struts2自己负责创建;struts2与spring集成时,Action实例由spring负责创建。这会导致在这两种情况下在对struts.xml配置文件进行配置时会有略微的差异。Struts2默认的实现是Prototype模式(23种设计模式中的原型模式),也就是说每个请求都会新生成一个Action实例,因此不存在线程是否安全的问题。特别需要注意的是:spring在默认情况下,scope是单例模式,即scope="singleton",这样只会创建一个Action实例,这样造成的后果是每次访问都是同一个Action实例,数据不安全。因此如果由spring管理Action的生命周期, scope要配成prototype作用域,即scope="prototype"。在spring的applicationContext.xml配置文件中配置如:
<!-- action配置 --> <bean id="testAction" class="com.study.action.TestXxxAction" scope="prototype"> <!-- action注入 --> <property name="xxx" ref="xxx" /> </bean>
scope作用域除了prototype和singleton外,还有一个作用域:session。如果作用域设置为scope="session",对避免web中action的并发问题有一定的帮助,因为只为当前用户创建一次bean实例,直至session消失。在这种情况下,对当前用户而言,bean是有状态的,好处就是少创建了bean的实例,有那么一点点性能的提升。
应用场景:
1. 多数情况下应使用prototype;
2. 若用户不多,且频繁操作(频繁使用action),硬件一般,可以考虑session,兴许还能提升一点点性能(未真正的测试过)。
1. struts2单独使用时,struts.xml配置文件中action的class属性为XxxAction的全路径名,struts.xml配置文件中配置如:
<action name="xxx"class="com.study.action.TestXxxAction"> <result>/test/showXxxTest.jsp</result> </action>
2.struts2与spring集成时,struts.xml中action的class属性是spring配置文件applicationContext.xml中配置的bean的id属性值,如下:
<!-- action配置 --> <bean id="testAction" class="com.study.action.TestXxxAction" scope="prototype"> <!-- action注入 --> <property name="xxx" ref="xxx" /> </bean>
<action name="xxx"class="testAction"> <result>/test/showXxxTest.jsp</result> </action>
struts2-spring-plugin-2.x.x.jar这个插件在产生action实例时,会自动地按照名字把action的属性注入进去,即使不在spring配置文件(applicationContext.xml)中为相关的action(bean)注入属性或者在action类中用注解注入,它也会按照action类中属性的名字从当前容器(Spring)中找有没有这个名字对应的bean并注入进来,或者显示的给定一个名字来注入。所以action的id(spring配置文件applicationContext.xml中的)不要与该类中的变量名相同。如果在struts.xml文件中配置action的class是指向action的实际类,那么action的产生由struts控制,此时action类中的相关变量会按照名称从容器中注入一个相应的bean,如果找不到对应名称的bean,一旦调用这个action就会出错。但是如果此时为变量加上一个@Resource注解,struts容器产生过action后就会从Spring容器中找相应的bean注入。如果class指向的是一个伪控制器(对应spring配置文件applicationContext中action的bean),那么action的产生由spring控制。此时action类中的相关变量必须用注解@Resource或者xml的方式自定义注入相应的bean,不像之前会按照名字从spring容器中自动查找注入bean,否则程序运行出错。
简单点说应该是由struts-spring-plugin插件来控制还是由spring容器控制,由插件来控制,则Action实例由插件来产生,而启动spring容器的自动装配功能,将所需要的业务组件自动装配到Action实例中。该策略中,spring只负责管理依赖关系。优点:配置简单。 缺点:1、Action与业务组件耦合度降到了代码层次,要求Action中的属性名要和配置文件中业务组件的id保持一致,耦合度高。2、由spring自动装配,依赖关系不明了,可读性差。 第二种,由spring容器控制,Action实例看做一个普通的bean实例,需改变scope的默认值。struts.xml中Action的class属性对应spring容器中一个Action实例的id。优点:实现了高度的解耦。缺点:1、配置文件冗余、臃肿。不仅需要在struts.xml中配置Action的信息还需要在spring的配置文件中配置个Action的信息。
相关推荐
4. **Spring插件**:在Struts2中使用Spring插件(struts2-spring-plugin),这个插件能够帮助Struts2与Spring进行交互,自动将Action类实例化并注入依赖。 5. **Action类**:Action类需要实现Spring的`org.spring...
为了实现Spring对Struts Action的管理,我们需要在Web应用中配置Spring容器,并通过Spring来创建和管理Struts中的Action实例。这样做的好处在于,Action实例的生命周期和依赖关系都可以由Spring容器来管理,提高了...
4. **Action 类**:Action 类通常作为 Struts2 处理请求的入口,它可以从 Spring 容器中注入所需的依赖。通过在 Action 类上使用 `@Component` 注解并配置在 Spring 配置文件中,可以确保 Spring 能够创建和管理这些...
引入Struts2的Spring插件,该插件使得Spring管理的Action类可以在Struts2中直接使用。在struts.xml配置文件中启用该插件。 4. **Action类的配置** 创建Spring管理的Action类,通常需要实现`...
3. **配置Struts2**:在Struts2的配置文件(struts.xml)中,需要声明Spring插件,告诉Struts2使用Spring来管理Action实例。这样,每次请求时,Struts2会从Spring容器中获取Action实例,而不是使用默认的实例化方式...
### Struts2、Spring与Hibernate整合应用:学生成绩管理系统 #### 一、知识点概览 本项目聚焦于Struts2、Spring与Hibernate三大框架的整合应用,旨在构建一个高效、稳定、易于维护的学生成绩管理系统。通过整合这...
同时,我们需要在Struts2的配置文件中指定Spring的Action代理(Spring-Action-Proxy),这样,Struts2的Action实例将由Spring管理。 在图书管理系统中,我们可以定义一个Spring Bean来代表图书实体类,包含了如书名...
整合Struts 2 和Spring 后,我们可以在Spring 配置文件中定义事务规则,并让Spring 自动管理Action 中的事务,使得代码更加简洁,降低出错率。 3. **AOP(Aspect-Oriented Programming, 面向切面编程)**:Spring ...
整合Spring和Struts 2的主要目的是将Spring的依赖注入和管理能力引入到Struts 2的Action中,以及利用Spring的AOP进行事务管理。整合步骤通常包括以下几个部分: 1. **添加依赖**:在项目中引入Spring和Struts 2的库...
- `StrutsSpring`可能包含一个简单的整合示例,包括Struts2的配置文件、Spring的配置文件以及相关的Action类和业务接口。 - 示例可能会展示如何配置Action类,如何在Spring中定义bean,以及如何在Struts2中引用...
4. **Struts2与Spring集成**:为了结合这两个框架的优点,我们需要配置Struts2的Spring插件。这将使Struts2能够从Spring容器中获取Action实例,实现Action的依赖注入。配置通常包括修改`struts.xml`中的`<package>`...
- 使用Spring的`<bean>`元素来创建Struts Action的实例,同时可以利用Spring的依赖注入特性来管理Action与其他组件之间的依赖关系。 2. **简化开发流程**: - 通过Spring管理Struts中的Action,可以减少大量的...
Spring 和 Struts2 是两种非常流行的 Java Web 开发框架,它们在企业级应用开发中有着广泛的应用。Spring 提供了全面的依赖注入(DI)和面向切面编程(AOP)功能,而 Struts2 则是用于构建 MVC(Model-View-...
**Struts2与Spring的集成** 在没有Struts2-Spring-Plugin的情况下,要在Struts2应用中使用Spring,需要手动配置Action类与Spring Bean之间的关联。而有了这个插件,配置过程变得更加简单。以下是Struts2-Spring-...
Struts2、Spring和Hibernate是Java Web开发中的三大框架,它们的整合应用广泛用于构建复杂的Web应用程序,如本例中的图书馆管理系统。这个系统实现了用户登录和注册功能,并且提供了对书籍表的操作,包括增、删、改...
同时,Spring与Struts2可以通过Spring-Struts2插件无缝集成,使得Action可以直接由Spring管理,增强了系统的可测试性。 **MyBatis** 是一个轻量级的持久层框架,它将SQL语句与Java代码分离,提供了更灵活的SQL操作...
在Struts2与Spring2的整合过程中,主要目标是将Struts2的控制层与Spring2的服务层无缝对接,以便更好地管理对象和执行业务逻辑。以下是一些关键知识点: 1. **依赖注入(Dependency Injection,DI)**:Spring2的...
在Java Web开发中,Spring和Struts2是两个非常重要的框架。Spring以其强大的依赖注入(DI)和面向切面编程(AOP)能力,而Struts2则以其优秀的MVC设计模式著称,两者结合可以构建出高效、可维护的Web应用。本文将...
《图书管理系统spring+struts+hibernate》是一款基于Java技术栈开发的图书管理软件,其核心框架包括Spring、Struts和Hibernate。该系统利用MySQL作为数据库存储数据,提供了完整的数据库备份,确保了数据的安全性与...