spring-mvc - Spring MVC 中未调用方面

标签 spring-mvc aop aspectj spring-aop

我的方面、注释和 MVC Controller 编写如下:

方面

@Aspect
public class AuditAspect {

    @Around(value = "@annotation(com.test.Audit)")
    public Object audit(ProceedingJoinPoint pjp) {
       System.out.println("Inside the Audit aspect ...");
       Object result = null;
        try {
            result = pjp.proceed();
        } catch (Throwable t) {

        }
        return result;
    }
}

注释:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Audit
{
    AuditType auditType();
}

Controller :

@RestController
@RequestMapping("/patients")
public class PatientController {

    @Audit(auditType = AuditType.PATIENT_LIST)
    @RequestMapping(value="", method=RequestMethod.GET)
    public APIResponse getPatients(HttpServletRequest request, HttpServletResponse response, @RequestParam(required = false, value="audit") String sAudit) {
       System.out.println("Inside getPatients ...");
       return null;
    }
}

但是,每当我发出休息请求时,方面的审核方法都不会被调用。

四处寻找帮助。发现很少有帖子提到 AspectJ 不能与 Spring MVC Controller 一起使用。然而,我用一个简单的 spring MVC 应用程序尝试了相同的示例,并且即使 Controller 方法被注释,方面也被正确调用。不知道这里出了什么问题。这里的任何指示/建议都会非常有帮助。

我尝试的示例应用程序没有使用 spring 事务管理器,也没有与 hibernate 等集成......这会有什么不同吗?

另外,下面给出的是上下文文件条目:

<aop:aspectj-autoproxy />
<context:component-scan base-package="com.test">
  <context:include-filter type="aspectj" expression="com.test.AuditAspect" />
</context:component-scan>
<context:annotation-config />

最佳答案

为了使 Spring AOP 工作,您的切面和目标对象都必须是 Spring @Component

关于spring-mvc - Spring MVC 中未调用方面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29163964/

相关文章:

java - Spring MVC 配置 url-pattern

java - 如何在 web.xml 中配置 spring-boot servlet?

java - 用于 aspectj 代理的 websphere 应用程序服务器中的类路径

c# - 有什么方法可以在不使用属性装饰的情况下将 AOP 应用于 .NET 库?

java - 如何将属性注入(inject) Aspect 日志记录类?

java - 我的方面的许多实例是在 spring 容器外部创建的,并且属性没有被注入(inject)

java - 带注释的 Spring MVC 验证在嵌套字段中不起作用

java - 在 Kotlin 中与 @RequestParam 一起使用时,自定义 HashMap 类的参数类型不匹配

java - 如何增加 spring 事务管理器的深度

java - 面向方面的编程 - 什么是 'cflow' ?