Вы прокомментировали:
@ kriegaex У меня все мои классы в определенном пакете, они @RestController
, и во многих из этих классов у меня есть обязательный заголовок в аргументах метода, пример:
@RequestHeader(value = "my-header") String myHeader
Вы получаете все @RestController
классы, подобные этим:
@within(org.springframework.web.bind.annotation.RestController)
Вы получаете все классы в определенном пакете (и его подпакетах), например:
within(a.certain.package..*)
Вы можете объединить это в
@within(org.springframework.web.bind.annotation.RestController) &&
within(a.certain.package..*) &&
execution(* *(..))
Часть execution(* *(..))
не требуется в Spring AOP, поскольку она поддерживает только точки соединения выполнения метода. В AspectJ вам это нужно, потому что там вы также можете перехватывать вызовы методов, конструкторы и другие точки соединения.
Если вы действительно можете на 100% полагаться на аннотацию параметра @RequestHeader
во всех целевых методах, вы можете использовать
execution(* *(.., @org.springframework.web.bind.annotation.RequestHeader (*), ..))
, а также изолируйте аннотацию и ее значение, как я описал здесь с телом запроса (просто измените аннотацию, а также настройте остальную часть кода в соответствии с вашими потребностями).
Если бы вы могли полагаться на параметр заголовка запроса, чтобы он всегда находился в одной и той же относительной позиции в сигнатуре, например, во-первых, во-вторых, в-третьих, слева или справа, это было бы еще проще, поскольку вы могли напрямую связать параметр метода с методом-рекомендацией параметр через args()
. Пожалуйста, дайте мне знать, если это так, и я могу показать вам пример.