一、概述
Struts2与Spring是两个优秀的开源框架,它们在各自领域内都有良好的表现,而将它们结合起来,不仅可以发挥两者的优点,而且还可以满足复杂的业务需求。在Struts2与Spring结合的方式中,最为常用的是使用struts2-spring-plugin,它可以很好地将两个框架进行集成,简化应用程序的配置和开发。
二、struts2-spring-plugin集成方式
1、使用Maven构建项目
在Maven项目的pom.xml文件中引入Struts2和Spring相关依赖。
<!-- Struts2 相关依赖 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.5.22</version>
</dependency>
<!-- Struts2与Spring集成的插件 -->
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.5.22</version>
</dependency>
<!-- Spring 相关依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.6.RELEASE</version>
</dependency>
2、在web.xml中加载Spring的配置文件
Struts2与Spring集成的方式一般是在web.xml文件中配置,以下是在web.xml中加载Spring的配置文件的示例:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/applicationContext.xml</param-value>
</context-param>
3、在struts.xml中配置架构
在struts.xml文件中需要增加对Spring的支持,可以通过以下示例进行配置:
<!-- action 配置 -->
<bean type="org.springframework.web.struts2.StrutsActionProxyFactory" scope="prototype"/>
<!-- result 配置 -->
<bean id="strutsSpringObjectFactory" type="org.apache.struts2.spring.StrutsSpringObjectFactory">
<property name="beanFactory" ref="applicationContext"/>
</bean>
<bean type="org.apache.struts2.dispatcher.Dispatcher" name="strutsDispatcher" class="org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter">
<injector>
<!-- 使用 strutsSpringObjectFactory 作为对象工厂 -->
<bean type="com.opensymphony.xwork2.inject.Container" name="struts"
class="org.apache.struts2.spring.StrutsSpringObjectFactory" scope="default" /
>
</injector>
</bean>
三、struts2-spring-plugin常用注解
1、@Autowired注解
@Autowired 注解可以自动装配一个bean。可以在action类中使用此注解,Struts2框架将会在容器中查找匹配的bean,并将这个bean 插入到 action类的相应字段上。
public class HelloAction extends ActionSupport {
@Autowired
private HelloService helloService;
//getter and setter
}
2、@Scope注解
@Scope注解指定bean的作用域。默认情况下,一个Spring bean是单例,也就是说它的实例在容器中只有一份,如果需要多份实例,可以通过该注解进行设置。
@Service
@Scope("prototype")
public class HelloService {
// 业务方法...
}
3、@Transactional注解
@Transactional 注解可以声明一个事务方法。在Struts2 Action方法上使用@Transactional注解即可实现事务操作。
@Transactional(rollbackFor = Exception.class)
public String execute() throws Exception {
//DAO操作
return SUCCESS;
}
四、结语
struts2-spring-plugin的使用,能够更好的将Spring和Struts2整合在一起,更好地实现项目开发和管理。在实际应用过程中,可以根据具体情况进行灵活配置,实现更好的效果。