Java - динамически игнорировать транзакционные методы - PullRequest
0 голосов
/ 28 февраля 2011

Я пишу программу, которая взаимодействует с SOAP API. Программа, которую я пишу, имеет дело с деньгами, и было бы полезно иметь возможность определять во время выполнения (я полагаю, что, если я могу иметь дело с этим во время выполнения, я могу легко собрать файлы конфигурации для использования после компиляции) хочу ли я, чтобы методы, которые имеют дело с деньгами, были выполнены.

У меня есть метод make request, через который проходят все вызовы API, в идеале я хотел бы что-то вроде этого:

  ...
   @DealsWithMoney
   public void myMethodWhichMakesAnAPIRequest() {
      ...
      this.makeRequest(...); 
   }

   public void makeRequest(...) {
      if (!this.allowMoneyHandlingMethods) {
          //Psuedo code
          if (method_that_called_this_method has @DealsWithMoney annotation) {
              //ignore
          }
      }
   }

Я никогда не писал пользовательскую аннотацию, поэтому буду признателен за некоторые советы. Кроме того, если бы вы могли предложить лучший метод для этого?

Приветствия

Пит

1 Ответ

0 голосов
/ 28 февраля 2011
public @interface DealsWithMoney {}

определит для вас аннотацию.

StackTraceElement[] stackTraceElements = Thread.currentThread().getStackTrace()

получает дорожку стека, из которой вы сможете получить ссылку на Method или Member вызывающего абонента и выполнить

Annotation[] annotations = method.getDeclaredAnnotations();

и проверьте, находится ли искомая аннотация в возвращаемом списке.

...