English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Aspect Oriented Programming(AOP) в некотором смысле является дополнением к OOP, так как он также предоставляет функции модульности. Но ключевыми единицами модульности являются аспекты, а не классы.
AOP делит логику программы на различные части (называемые аспектами). Это используется для междисциплинарные аспектыдля повышения модульности.
cross-cutting concernsЭто аспект, который влияет на весь приложение, и его следует как можно больше сосредоточить в одном месте кода, например, управление транзакциями, аутентификация, запись日志, безопасность и т.д.
Почему использовать AOP?
Это предоставляет способ, который можно динамически добавлять дополнительные аспекты до, после или вокруг фактической логики. Предположим, что у класса есть 10 методов, как показано ниже:
class A{ public void m1(){...} public void m2(){...} public void m3(){...} public void m4(){...} public void m5(){...} public void n1(){...} public void n2(){...} public void p1(){...} public void p2(){...} public void p3(){...} }
С началом от m есть 5 методов, с началом от n есть 2 метода, с началом от p есть 3 метода.
ПонимаюМне нужно вести журнал и отправлять
Проблемы без AOPМы можем вызывать методы, начинающиеся с m (ведение журнала и отправка уведомлений). В этом случае нам нужно будет написать код для всех 5 методов.
Но если клиент в будущем скажет, что не нужно отправлять уведомления, то нужно будет изменить все методы. Это приведет к проблемам в поддержке.
Решение AOPМы не должны вызывать методы из методов. Теперь мы можем определять другие аспекты в методах класса, такие как ведение журнала, отправка уведомлений и т.д. Их записи даются в файле xml.
В будущем, если клиент скажет, что нужно удалить функциональность уведомлений, нам нужно будет только изменить файл xml. Таким образом, поддерживать AOP легко.
AOP主要用于 следующие случаи:
Предоставляет декларативные корпоративные услуги, такие как декларативное управление транзакциями. Он позволяет пользователям реализовывать пользовательские аспекты.
Концепции и термины AOP такие:
Join point Advice Pointcut Введение Целевой объект Аспект Интерцептор AOP прокси Вязание
Join point - это любой момент в программе, например, выполнение метода, обработка исключений, доступ к полю и т.д. Spring поддерживает только Join point выполнения методов.
Advice представляет собой действия, которые аспект выполняет в определенном Join point. Существуют различные типы Advice:
Advice Before: Он выполняется до Join point. Advice After Returning: Он выполняется после нормального завершения слияния. Advice After Throwing: Если метод завершается из-за выброса исключения, то выполняется. Advice After (finally): Он выполняется после Join point, независимо от того, заканчивается ли Join point нормальным возвращением или исключением. Advice Around: Он выполняется до и после Join point.
Это один из языков выражения AOP, который соответствует Join point.
Это означает другие методы и поля типа introductions. Это позволяет вам вводить новые интерфейсы в любые объекты с рекомендациями.
Это объект или несколько объектов с аспектами советов. В Spring это также называется объектом прокси, так как Spring AOP реализуется с использованием прокси в время выполнения.
Это класс, содержащий советы, точки вхождения и т.д.
Это аспект, содержащий только один совет.
Это используется для реализации контрактов аспектов, созданных AOP фреймворком. В Spring фреймворке это будет JDK динамический прокси или CGLIB прокси.
Это процесс объединения аспектов с другими типами приложений или объектами для создания объектов с рекомендациями. Вязание может выполняться в компиляционное время, время загрузки или время выполнения. Spring AOP выполняет вязание в время выполнения.
AOP реализуется следующим образом:
AspectJ SpringAOP JBoss AOP
AOP Spring может использоваться следующими тремя способами. Однако наиболее широко используемый метод - это стиль аннотаций AspectJ. Ниже приведены три метода использования AOP Spring:
Старый стиль Spring 1.2 (базируется на dtd) (поддерживается и в Spring 3) Стиль конфигурации с использованием аннотаций AspectJ Стиль конфигурации XML с использованием шаблонов