【问题标题】:Aspect not getting called in Spring MVC在 Spring MVC 中没有调用方面
【发布时间】:2015-03-20 10:08:14
【问题描述】:

我的方面、注释和 MVC 控制器编写如下:

方面

@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();
}

控制器:

@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 控制器一起使用的帖子。但是,我用一个简单的 spring MVC 应用程序尝试了这个相同的示例,并且即使控制器方法被注释,切面也被正确调用。不知道这里出了什么问题。这里的任何指示/建议都会非常有帮助。

我尝试的示例应用程序没有使用 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-mvc aop aspectj spring-aop


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-10-08
      相关资源
      最近更新 更多