拦截基于注解的Spring MVC控制器调用

时间:2018-06-21 06:29:21

标签: java spring spring-mvc

我在Spring MVC中具有以下控制器

@GetMapping("/id/kw")
public ModelAndView industryWater(HttpServletRequest request) {
    return someMAV
}

我想了解基于自定义注释的控制器的执行情况

@GetMapping("/id/kw")
@WaterBefore
@WaterAfter
public ModelAndView industryWater(HttpServletRequest request) {
    return someMAV
}

我可能可以使用BEAN postProcessor注入一些东西,但是我不知道如何将注入的部分与控制器执行挂钩。另外,在实现我的request时,我需要访问上下文mav water aspect

我研究了BeanPostProcessorInterceptor,但没有设法将所有部分连接起来。

1 个答案:

答案 0 :(得分:0)

我认为您需要在Spring中使用 AOP 。这非常有用。它使用事务管理和日志记录等。

Spring AOP (面向方面​​的编程)框架用于模块化各个方面的跨领域关注点。如果您想要一个更简单的定义,则可以将它们视为拦截器,但可以进行更多配置。在春季,有两种不同的构造称为“拦截器”。首先,有一些处理程序拦截器,它们是Spring MVC框架的一部分,使您能够向请求中添加拦截器逻辑。但是您也有方法拦截器,它是Spring AOP 框架的一部分。这些是比Handler Interceptor更通用的机制,但也可能更复杂。在AOP术语中,此类拦截器提供了一种对您正在谈论的“方面”进行编码的方法。

赞:

@Pointcut(" execution (* com.your.controller.industryWater(..))")
public void pointcutDemo() {}

@Before("pointcutDemo())")
public void logBefore(){ } 

@After("pointcutDemo())")
public void logAfter(){ } 

链接:https://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/

https://www.journaldev.com/2583/spring-aop-example-tutorial-aspect-advice-pointcut-joinpoint-annotations

http://www.baeldung.com/spring-mvc-handlerinterceptor