аннотация с параметром для аспекта - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть аспект, который можно использовать с аннотацией:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DumpToFile {

}

И точка соединения:

@Aspect
@Component
public class DumpToFileAspect {

  @Around("@annotation(DumpToFile)")
  public Object logExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable {

    ...
    // I likte to read out a parameter from the annotation...
    Object proceed = joinPoint.proceed();

    ...

    return proceed;
  }
}

Я могу успешно использовать аспект в методе с @DumpToFile;однако я хотел бы передать параметр в аннотацию и получить его значение в моем аспекте.
Например.@DumpToFile(fileName="mydump").Кто-нибудь может показать мне, как это сделать?

Ответы [ 3 ]

0 голосов
/ 14 декабря 2018

Вы должны быть в состоянии передать интерфейс аннотации методу перехватчика.Хотя я не пробовал себя.

Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface DumpToFile {

      String fileName() default "default value";

}

В DumpToFileAspect -

@Aspect
@Component
public class DumpToFileAspect {

  @Around("@annotation(dtf)")
  public Object logExecutionTime(ProceedingJoinPoint joinPoint, DumpToFile dtf) throws Throwable {

    ...
    // I likte to read out a parameter from the annotation...

    System.out.println(dtf.fileName); // will print "fileName"

    Object proceed = joinPoint.proceed();

    ...

    return proceed;
  }
}
0 голосов
/ 14 декабря 2018

Вы можете использовать это:

 @Around("@annotation(dumpFile)")
  public Object logExecutionTime(ProceedingJoinPoint joinPoint,DumpToFile dumpFile) 

Внутри @annotation должно быть имя параметра DumpToFile.

Подробнее см. В документации

0 голосов
/ 14 декабря 2018

Измените @Around на:

@Aspect
@Component
public class DumpToFileAspect {

  @Around("@annotation(dumpToFileAspect)")
  public Object logExecutionTime(ProceedingJoinPoint joinPoint, DumpToFile dumpToFileAspect) throws Throwable {

    ...
    // I likte to read out a parameter from the annotation...
    String fileName = dumpToFileAspect.getFileName();
    Object proceed = joinPoint.proceed();

    ...

    return proceed;
  }
}
...