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

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

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

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

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

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


person Ondra Žižka    schedule 04.02.2010    source источник
comment
возможные случаи? Это почти бесконечная коллекция. Однако не все из них - хорошая идея. Ставить можно все. Есть ли способ сузить или сфокусировать этот вопрос?   -  person S.Lott    schedule 04.02.2010
comment
Внимательно прочтите: вопрос содержал возможные варианты эффективного внедрения АОП в разработку приложений. Под этим я подразумеваю случаи, когда использование АОП - хорошая идея. Извините, если вопрос не ясен.   -  person Ondra Žižka    schedule 04.02.2010
comment
Должно быть вики сообщества   -  person skaffman    schedule 04.02.2010
comment
Эффективное участие выглядит как приглашение просто перечислить все возможные способы использования АОП. Эффективный - это скользкий термин, и без какой-либо квалификации или фильтрации самый глупый метод АОП мог бы быть назван эффективным поклонником АОП.   -  person S.Lott    schedule 04.02.2010


Ответы (11)


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

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

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

    • who the user is
    • какой метод они вызывают
    • какие данные они предоставляют
    • в какое время был вызван метод
    • был ли вызов успешным или нет (то есть, если было сгенерировано исключение)
person Kevin    schedule 04.02.2010
comment
можно ли использовать aop для бизнес-кода? Предположим, у меня есть докладчик, который вы можете установить для него представление или НЕ (mvp). то я не хочу продолжать проверять, является ли представление нулевым для каждого вызова для просмотра, могу ли я обработать эту нулевую проверку перед любым вызовом для просмотра методов? - person Amir Ziarati; 06.06.2018
comment
@Kevin: Как вы справляетесь с ошибкой аудита в этом случае? Вы помечаете аудит неудачным, если он вызывает какое-либо исключение, даже тривиальные исключения, такие как divyzero, nullpointer-exception? - person Gaurav; 17.10.2018

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

Ух ты ... 10 лет назад - для АОП было мало ... Вот еще несколько

  • Уметь настраивать объекты, для которых у вас нет доступа к их конструктору (например, объекты jpa)
  • Реализация правил безопасности (безопасность говорит, что пользователю не разрешено вызывать этот метод - АОП может это реализовать)
  • Менеджер транзакций (начало, фиксация, откат)
  • Кеширование - хотите кэшировать результат метода и не вызывать его снова.
person Michael Wiles    schedule 05.02.2010

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

person Pedro Ghilardi    schedule 04.02.2010

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

person Adisesha    schedule 04.02.2010

Мы используем его для управления лицензиями на программное обеспечение, т. Е. Разрешаем запуск программного обеспечения только в том случае, если на компьютере установлены определенные лицензии. Это не сильно отличается от вашего перечисленного использования, так как это форма проверки безопасности.

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

person Carles Barrobés    schedule 21.11.2010

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

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

person Adeel Ansari    schedule 04.02.2010

  • Блокировки чтения / записи. Вместо репликации того же фрагмента я использовал аспект для определения методов, которым нужна была блокировка чтения или монопольная блокировка.
person ewernli    schedule 04.02.2010

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

  • Вызов асинхронного метода
  • Мониторинг

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

person Espen    schedule 10.02.2010

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

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

person Turing Complete    schedule 16.07.2010

Проверка контрактов кода во время выполнения. Контракты кода для .NET используют AOP для

Проверка времени выполнения. Наш двоичный перезаписчик модифицирует программу, вставляя контракты, которые проверяются как часть выполнения программы.

person Adrian Rus    schedule 02.10.2015

Мы используем AspectJ для выполнения АОП. Сценарии использования, помимо вышеупомянутых, следующие:

  • Ограничение доступа к вызовам методов только для нескольких классов.
  • Автоматическое аннотирование выбранных методов / классов / полей.
person nitish712    schedule 04.01.2016
comment
Как вы автоматически комментируете методы? Нам нужно применять аннотации во время компиляции, верно? - person Gaurav; 17.10.2018