如何在执行Spring Web服务之前运行一些代码

时间:2017-09-07 22:53:34

标签: java spring spring-mvc spring-ws

我使用spring实现了一些休息网络服务。 我有一些常见的代码,我需要在每个Web服务之前执行。 我明确地在每个Web服务的开头都明确地调用这个公共代码。

有没有办法让春天"自动"在调用Web服务之前调用此公共代码?

3 个答案:

答案 0 :(得分:0)

您应该使用spring aop拦截每个Web服务,并在其上执行公共代码。如下代码所示:

<bean id="aspect" class="com.zhuyiren.Aspect"/>

<aop:config>
    <aop:aspect ref="aspect">
        <aop:before method="before" pointcut="execution(* com.zhuyiren.service..*.*(..))"/>
    </aop:aspect>
</aop:config>

上面的代码意味着调用com.zhuyiren.service打包的某个bean的每个方法总是执行common中的方法com.zhuyiren.Aspect。你可以用common方法编写公共代码。像:

public void common(){
    System.out.println("execute some common code");
}

测试用例:

public static void main(String[] args) throws Exception {
    ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("test.xml");
    UserService service = context.getBean(UserService.class);
    System.out.println(service.getUser(3));
}

印刷品是:

execute some common code
UserInfo{id=3, name='zhuyiren', password='123456', testString=[]}

答案 1 :(得分:0)

看看HandlerInterceptorAdapter 您可以扩展它并从请求中提取您需要的任何信息

最佳

答案 2 :(得分:0)

答案取决于您要执行的代码。

一种技术是使用AOP(如@dabaicai答案中所述)。

另一种技术是添加JEE过滤器以在请求进入处理程序方法之前处理该请求。

以下是一些链接:

  1. JEE6 Tutorial Filtering Requests and Responses
  2. Oracle's Essentials of filters
  3. Mkyong's Spring JEE filters - 带上一粒盐,Mkyong解释清楚。
  4. 另一种选择:google搜索“spring jee filter”