3

可能重复:
带有特定注释的类的所有方法的@AspectJ 切入点

我正在尝试为具有自定义注释的类的所有方法编写切入点。这是代码

  • 注解:

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    @Retention(value = RetentionPolicy.RUNTIME)
    @Target(value = ElementType.METHOD)
    public @interface ValidateRequest {}
    
  • 控制器中的方法:

     @RequestMapping(value = "getAbyB", produces = "application/json")
     @ResponseBody
     @ValidateRequest
     public Object getAbyB(@RequestBody GetAbyBRequest req) throws Exception { 
         /// logic
     }
    
  • 方面:

     @Aspect
     @Component
     public class CustomAspectHandler {
         @Before("execution(public * *(..))")
         public void foo(JoinPoint joinPoint) throws Throwable {
             LOG.info("yippee!");
         }
     }
    
  • 应用上下文:

    `<aop:aspectj-autoproxy />`
    

我一直在尝试各种建议,如下所述,但似乎没有一个有效(除了上面使用的那个)

  • @Around("@within(com.pack.Anno1) || @annotation(com.pack.Anno1)")
  • @Around("execution(@com.pack.Anno1 * *(..))")
4

1 回答 1

2

这应该有效:

 @Aspect
 @Component
 public class CustomAspectHandler {
    @Pointcut("execution(@ValidateRequest * *.*(..))")
    public void validateRequestTargets(){}

     @Around("validateRequestTargets()")
     public Object foo(JoinPoint joinPoint) throws Throwable {
         LOG.info("yippee!");
         return joinPoint.proceed();
     }
 }
于 2012-12-27T16:29:46.353 回答