虽然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)
(0票)
(0票)
(0票)
(0票)
(0票)
(0票)