Struts2整合Spring

5 篇文章 0 订阅
3 篇文章 0 订阅

此文章的代码是在另一篇有关Struts2文章代码的基础上完成的,请参考Struts项目实例

在引入Spring之前,如果我们的ActionSupport需要引用一些业务类,如下所示:

private UserService userService = new UserServiceImpl();

上面的代码把UserAction class和UserServiceImpl class的依赖关系写死了,这种设计很不友好,体现在下面两个方面。

  • 如果我需要UserService的另一个实现类替代UserServiceImpl,那我就需要找到并修改所有的依赖代码。
  • 没有UserServiceImpl我就无法测试UserAction类。我不能在编写测试用例时使用UserServiceImpl的子实现类来隔离UserAction,因为UserServiceImpl的使用是硬编码的。

Spring提供了一种机制,通过在运行时注入它们来管理依赖性。Struts 2 ActionSupport类——就像任何其他Java类一样——可以通过Spring框架注入依赖对象。因此,我没有使用上面的代码,而是在UserAction中有这个语句。

Spring提供了一种机制,通过运行时注入他们来管理依赖类。Struts 2 ActionSupport类就像其他的Java类一样,可以通过Spring框架注入依赖对象。因此,我没有使用上面的代码,而是在UserAction中有这个语句

//private UserService userService = new UserServiceImpl();
private UserService userService;

下面是整合Spring的需要的步骤:

1. 在pom.xml添加struts2-spring-plugin依赖包

Struts 2 Spring插件的当前版本(2.5.14.1)对Spring 4.1.9有传递依赖关系。如果您想要使用最新版本的Spring,那么您应该为Struts 2 Spring插件排除您的pom中的传递依赖项。然后声明依赖节点到Spring jar文件的当前最新版本版本。

<dependency>
	<groupId>org.apache.struts</groupId>
	<artifactId>struts2-spring-plugin</artifactId>
	<version>${struts2.version}</version>
</dependency>

2. 编写UserAction Class,不要再用硬编码依赖。同时必须为依赖对象添加set方法。

//private UserService userService = new UserServiceImpl();
private UserService userService;

public void setUserService(UserService userService) {
    this.userService = userService;
}

Spring会在运行时使用这个set方法为UserAction类提供一个UserService类型的实例。 will use that set method to provide

3. 在web.xml添加Spring监听

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

在应用被Servle容器起来的时候上面的代码会激活Spring框架。Spring默认情况下会到WEB-INF下面去找名字为applicationContext.xml的文件。

4. 在WEB-INF添加Spring配置文件applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd">

	<bean id="userService" class="angelia.struts.service.UserServiceImpl" />

</beans>

使用上面的方法,Struts 2框架仍然需要管理ActionSupport类的创建。如果想Spring管理ActionSupport类的创建,可以通过applicationContext.xml文件的配置实现。

5. 有Spring管理ActionSupport Class的Spring配置

<bean id="userService" class="angelia.struts.service.UserServiceImpl" />
    
<bean id="userAction" class="angelia.struts.action.UserAction" scope="prototype">
        <property name="userService" ref="userService" />
</bean>

6. Spring管理ActionSupport类的Struts配置

<action name="loginInput" class="userAction" method="input">
	<result name="input">/newlogin.jsp</result>
</action>
		
<action name="login" class="userAction" method="execute">
	<result name="success">/index.jsp</result>
	<result name="input">/newlogin.jsp</result>
</action>

总结:

这篇文章大概讲了如何使用Struts2的Spring插件来集成Spring和Struts。通过使用Struts2的Spring插件,我们可以通过Spring来管理ActionSupport依赖的类。当然,Spring还有很多其他优势,比如AOP, Spring JDBC等。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AngeliaZheng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值