Spring создает аспект для всех методов с аннотацией, включенной в метааннотацию - PullRequest
0 голосов
/ 23 марта 2020

У меня есть аннотация, подобная этой (в Spring Boot 2):

package com.test;

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

и мета-аннотация:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@MyAnnotation 
public @interface MyEndpoint{ }

Как определить аспект для выполнения перед каждым методом, который имеет @MyAnnotation?

Если я определю его ниже,

@Before("execution(public * *(..)) && @annotation(myAnnotation)")
public void authorize(JoinPoint pjp, MyAnnotation myAnnotation) { }

, тогда метод authorize вызывается только

@MyAnnotation()
public myMethod(){}

и НЕ в этом случае:

@MyEndpoint()
public myMethod() {}

спасибо

1 Ответ

0 голосов
/ 23 марта 2020

@Inherited аннотации работают только от аннотированных классов до подклассов, а не в любом другом случае. Я объяснил это подробно здесь , а также покажу, как может выглядеть обходной путь AspectJ. Вы можете адаптировать его к вашему случаю. Но вам действительно нужно использовать AspectJ для достижения этой цели, а не только Spring AOP.

...