Java - как применить аннотацию к определенным вызовам методов - PullRequest
0 голосов
/ 18 октября 2018

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

public interface Door {
  void open() throws DoorException;
  void close() throws DoorException;
}

public class Ferrari {
  @Inject @Lightweight Door door;

  public void drive() {
    open();

    close();

    open();
  }
}

В этом случае здесь я хочу, чтобы все операции открытия / закрытия выполнялисьэффективно обернуть таким же образом, но что, если я хочу, чтобы кто-то вел себя по-другому?

Я хотел бы сделать что-то вроде:

public class Ferrari {
      @Inject Door door;

      public void drive() {
        door.open();

        door.close();

        @Slowly door.open();
      }
    }

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

Каков наилучший способ сделать это?

Я мог бы сделать это:

public class Ferrari {
          @Inject Door door;

          public void drive() {
            door.open();

            door.close();

            ((@Slowly Door)door).open();
          }
        }

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Я планирую использовать 2 аспекта, 1 чтобы пометить определенные методы как «особые», а затем поместить флаг в реестр, а второй будет заключаться в том, чтобы обернуть все вызовы данного интерфейса и посмотреть в реестре, чтобы увидеть,флаг установлен.

0 голосов
/ 18 октября 2018

Я не думаю, что вы можете сделать это, и если вы хотите сделать это, чем, возможно, вам следует переосмыслить, как вы организовали свой код.

Я не уверен, почему вы хотели бы сделать это, номожно предположить, что, может быть, для одного конкретного Ferrari вы хотите открыть дверь другим способом.Тогда вы можете просто расширить класс Ferrari для конкретной модели и использовать другую реализацию для интерфейса Door.Я думаю, вы можете сделать это, используя Qualifiers весной или @Named в Java ee.

В приведенной ниже ссылке есть аналогичный ответ, если это поможет. Добавление нескольких реализаций в один сервис Spring

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...