您所在的位置:开发 > Java > 使用Spring更好地处理Struts动作(4)

使用Spring更好地处理Struts动作(4)

2006-10-23 16:15 George Franciscus Ibm 我要评论(0) 字号:T | T
一键收藏,随时查看,分享好友!

在本文中,我利用控制反转(IOC)设计模式把一个Struts应用程序注入Spring框架,您将亲身体会到IOC模式的强大。具体了解三种将Struts MVC整合到Spring框架的方法并将揭示每种方法的缺陷并且对比它们的优点。

AD:

虽然Spring提供很多内置拦截器,但是我将向您展示如何创建自己的拦截器并把它应用于一个Struts动作。为了使用拦截器,您需要做三件事:

1、创建拦截器;
2、注册拦截器;
3、声明在何处拦截代码。

这看起来非常简单的几句话却非常强大。例如,在清单7中,我为Struts动作创建了一个日志记录拦截器。这个拦截器在每个方法调用之前打印一句话:

清单 7.一个简单的日志记录拦截器

package ca.nexcel.books.interceptors;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class LoggingInterceptor implements MethodBeforeAdvice {
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println("logging before!");
}
}

这个拦截器非常简单。before()方法在拦截点中每个方法之前运行。在本例中,它打印出一句话,其实它可以做您想做的任何事。下一步就是在Spring配置文件中注册这个拦截器,如清单8所示:

清单 8.在Spring配置文件中注册拦截器

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" 
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
<bean id="bookService" class="ca.nexcel.books.business.BookServiceImpl"/>

<bean name="/searchSubmit" 
class="ca.nexcel.books.actions.SearchSubmit">
<property name="bookService">
<ref bean="bookService"/>
</property>
</bean>

<!--  Interceptors --> 
<bean name="logger"    
class="ca.nexcel.books.interceptors.LoggingInterceptor"/> |(1)

<!-- AutoProxies -->
<bean name="loggingAutoProxy" 
class="org.springframework.aop.framework.autoproxy.
BeanNameAutoProxyCreator"> |(2)
<property name="beanNames">
<value>/searchSubmit</valuesgt; |(3)
</property>
<property name="interceptorNames">
<list>
<value>logger</value> |(4)
</list>
</property>
</bean>

</beans>

您可能已经注意到了,清单8扩展了清单6中所示的应用程序以包含一个拦截器。具体细节如下:

◆在(1)处,我注册了这个拦截器。
◆在(2)处,我创建了一个bean名称自动代理,它描述如何应用拦截器。还有其他的方法定义拦截点,但是这种方法常见而简便。
◆在(3)处,我将Struts动作注册为将被拦截的bean。如果您想要拦截其他的Struts动作,则只需要在“beanNames”下面创建附加的<value>标记。
◆在(4)处,当拦截发生时,我执行了在(1)处创建的拦截器bean的名称。这里列出的所有拦截器都应用于“beanNames”。
就是这样。就像这个例子所展示的,将您的Struts动作置于Spring框架的控制之下,为处理您的Struts应用程序提供了一系列全新的选择。在本例中,使用动作委托可以轻松地利用Spring拦截器提高Struts应用程序中的日志记录能力。

结束语

在本文中,您已经学习了将Struts动作整合到Spring框架中的三种窍门。使用Spring的ActionSupport来整合Struts(第一种窍门中就是这样做的)简单而快捷,但是会将Struts动作与Spring框架耦合在一起。

如果您需要将应用程序移植到一个不同的框架,则需要重写代码。第二种解决方法通过委托RequestProcessor巧妙地解开代码的耦合,但是它的可扩展性不强,并且当Struts的RequestProcessor变成一系列命令时,这种方法就持续不了很长时间。第三种方法是这三种方法中最好的:将Struts动作委托给Spring框架可以使代码解耦,从而使您可以在您的Struts应用程序中利用Spring的特性(比如日志记录拦截器)。

(责任编辑 火凤凰 sunsj@51cto.com  TEL:(010)68476636-8007)


内容导航

分享到:

网友评论TOP5

查看所有评论(

提交评论

  1. 专题:JVM编程语言,你的选择?
  2. 宅男程序员给老婆课程之11:域模型

文章排行

本月本周24小时

热点专题

更多>>
  • QWrap入门指南
    QWrap入门指南
    你只需要一点javascript语言的基本知识,就可以来轻松
  • JavaScript入门
    JavaScript入门
    1996年,网景(Netscape)公司开始研发一种新的语言Moch
  • 移动Web开发指南
    移动Web开发指南
    移动设备是一种全新的媒介。桌面系统中总结出来的最佳

读书

大师品软件——软件之痛与应对之道
这并不是一本传统的技术专著,因为它并没有包含一行代码,而更像是一部技术评论。作者通过幽默诙谐而又不失辛辣的语言,从程序员

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i 移动互联网生活门户 灵客风LinkPhone