Spring AOP - извлечение метода и аннотаций параметров - PullRequest
0 голосов
/ 24 мая 2018

У меня есть аннотация метода (@MethodAnno) и аннотация параметра (@P).Мне нужно создать аспект для захвата вызовов методов, аннотированных @MethodAnno, и поиска аргументов методов, аннотированных @P.Однако, хотя я могу получить аннотацию метода в моем аспекте, аннотации параметров не возвращаются в MethodSignature.Вот что у меня есть.

Аннотации

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.TYPE})
public @interface MethodAnno {

    Foo[] foo();

}

@Target({ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface P {

    Bar value();
}

Аспект

@Aspect
@Component
public class MyAspect {

    @Before("@annotation(methodAnnotation)")
    public void methodsWithMethodLevelAnnotation(final JoinPoint pjp, MethodAnno methodAnnotation) {
        MethodSignature signature = (MethodSignature) pjp.getSignature();
        Annotation[][] parameterAnnotations = signature.getMethod().getParameterAnnotations();

        // parameterAnnotations is always a single element array and the element is a zero-length array
    }
}

Использование

public interface Service {
    public void execute(String input);
}

@Service    
public class ServiceImpl implements Service {
    @Override
    @MethodAnno
    public void execute(@P String input) {
        ....
    }
}
...