首页 > 解决方案 > 基于注解拦截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.

我研究了一下BeanPostProcessor,,Interceptor但没有设法连接所有部分。

标签: javaspringspring-mvc

解决方案


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

Spring AOP(面向切面编程)框架用于模块化切面中的横切关注点。如果您想要一个更简单的定义,您可以将它们视为拦截器,但可能有更多选项配置。在 Spring 中有两种不同的构造被称为“拦截器”。首先,有处理程序拦截器,它是 Spring MVC 框架的一部分,让您能够将拦截器逻辑添加到请求中。但是您也有方法拦截器,它们是 Spring AOP框架的一部分。这些机制比处理程序拦截器更通用,但也可能更复杂。在 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


推荐阅读