Каковы возможные варианты использования AOP?

Я хотел бы сделать изображение того, что является возможными случаями для эффективного участия AOP в проектировании приложений. Все, что я встретил до сих пор:

  • связанный с входом
  • проверки безопасности
  • управление транзакциями
  • тонкая настройка унаследованного приложения

Что-нибудь еще?

(Это не должен быть обязательно основанный на прокси AOP Spring - скорее JBoss AOP.)

(Связанный вопрос)

53
задан Community 28 September 2017 в 15:21
поделиться

8 ответов

Я могу привести два примера, в которых мы его используем:

  • Автоматическая регистрация объектов в JMX для удаленного управления. Если класс аннотирован нашей аннотацией @AutoRegister , у нас есть аспект, который отслеживает новые экземпляры этого класса и автоматически регистрирует их в JMX.

  • Ведение журнала аудита (золотой стандарт использования АОП). Это немного грубо, но общий подход состоит в том, чтобы аннотировать методы, которые представляют некоторые проверяемые действия.В сочетании с чем-то вроде Spring Security мы можем получить довольно хорошее представление:

    • кто пользователь;
    • какой метод они вызывают;
    • какие данные они предоставляют
    • в какое время был вызван метод
    • был ли вызов успешным или нет (т. Е. Было сгенерировано исключение)
29
ответ дан 7 November 2019 в 08:51
поделиться

Чтобы увидеть охват АОП с точки зрения применимости, я действительно рекомендую вам прочитать книгу Aspect-Oriented-Software-Development-Use-Cases . В этой книге описаны варианты использования функциональных и нефункциональных требований с использованием АОП. После этого вы увидите, что аспекты могут использоваться для большего количества требований, чем ведение журнала, отслеживание, безопасность и т. Д.

7
ответ дан 7 November 2019 в 08:51
поделиться

Кэширование на уровне метода, если ваш метод не имеет состояния (я имею в виду, возвращает то же значение при повторном вызове с одинаковыми значениями параметров). Это более эффективно в случае методов DAO, поскольку позволяет избежать попадания в базу данных.

4
ответ дан 7 November 2019 в 08:51
поделиться

Порядок не имеет значения. Базовая реализация onDestroy () не делает ничего, кроме того, что вы его назвали. Некоторые производные классы (такие как ListActivity) могут что-то делать, но пока вы не попытаетесь использовать их состояние после вызова производного класса, вы будете в порядке.

-121--3690496-

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

При защите заголовка компилятор скажет 'Ha! Я видел это раньше, и нет я не буду анализировать/lex синтаксис "тем самым ускорить процесс компиляции.

Надеюсь, что это поможет, С уважением, Том.

-121--4132638-
  • Блокировки чтения/записи . Вместо того, чтобы реплицировать тот же фрагмент, я использовал аспект, чтобы определить методы, которые нуждались в блокировке чтения или эксклюзивной блокировке.
4
ответ дан 7 November 2019 в 08:51
поделиться

Одним из эффективных способов использования АОП, помимо всех перечисленных вами, может быть проверка. Проверка пользовательского ввода или бизнес-объектов.

Статьи по теме, на которые стоит обратить внимание.

4
ответ дан 7 November 2019 в 08:51
поделиться
  • Обработка исключений: не нужно повторять ужасный список try ... catch, catch, catch и т. Д. - также означает, что обработка исключений гарантированно будет согласованной.
  • Мониторинг производительности: очень полезен, поскольку использование аспекта не навязчиво и может быть выполнено постфактум, а затем отключено, когда больше не требуется.
4
ответ дан 7 November 2019 в 08:51
поделиться

Я также порекомендую аспекты для:

  • Вызововов метода Async
  • Monitoring

С помощью Spring и tcServer (разработчик) можно легко контролировать все ваши Spring бобы с помощью @Компонентная аннотация. Вы можете увидеть использованное время, входные и возвращаемые данные, включая исключения.

1
ответ дан 7 November 2019 в 08:51
поделиться

INotifyPropertyChanged и подобные ужасы.

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

1
ответ дан 7 November 2019 в 08:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: