Передача динамических значений в аннотации Java - PullRequest
0 голосов
/ 24 августа 2018

Рассмотрим следующий сценарий:

public void someMethod () {}

Я хочу аннотировать someMethod () пользовательской аннотацией, скажем @CustomAnnotation.Я хочу взять динамический параметр в CustomAnnotation из параметра метода и вызвать ошибку времени компиляции, если этот параметр не объявлен в сигнатуре метода.

Например:

@CustomAnnotation(mandatorySample = "customId")
public void someMethod(String customId) {
}

Для приведенного выше фрагмента я хочу выдать ошибку времени компиляции, если someMethod не передает параметр «customId».Основная цель - взять параметр динамического идентификатора из аргументов метода или использовать один параметр для метода и аннотации.

Мое исследование: Я исследовал одно решение - использовать инъекцию через позицию Аргумента и получать значение от отражений.Но все же я не могу вызвать ошибку времени компиляции в этом.

Я открыт для решения на основе #Java или #Spring.

* Больше объяснений:
Допустим, моя аннотация

Public @interface Logger { 
  String mandatoryLogParam(); 
} 


Пусть метод someLogMethod(...) использует мою аннотацию.Рассмотрим следующие случаи.

** Invalid Usage ** 
@Logger(mandatoryLogParam = ‘myMandatoryGeneratedId’)
public void someLogMethod(String logMessage) {
}
MyExpectation: To throw compile error as
-> Method signature should includeparameter named “myMandatoryGeneratedId”

** Valid Usage: **
@Logger(mandatoryLogParam = ‘myMandatoryGeneratedId’)
public void someLogMethod(String logMessage, String myMandatoryGeneratedId) {
}
MyExpectation: No compile error is thrown. 

Моя цель здесь - использовать параметр, который метод определяет, чтобы использовать его в качестве внутренней логики аннотации.В то же время вызывая проверку времени компиляции для разработчика, используя аннотацию.

Обратите внимание на использование * 'myMandatoryGeneratedId' * в приведенном выше коде.

Возможно ли это?Остальные обходные пути?

...