我的方面、注释和 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/