5. Spring AOP
В основе аспектно-ориентированного
программирования лежит понятие
crosscutting concerns, которое не имеет
пока устоявшегося эквивалента в
русском языке. Наиболее близким по
смыслу считается и чаще всего
используется словосочетание
«сквозная функциональность»
6. Spring AOP
Под сквозной функциональностью
понимается функциональность,
реализовать которую в отдельном
компоненте языка программирования
традиционными средствами
процедурного или объектно-
ориентированного программирования
или очень сложно, или вообще
невозможно.
7. Spring AOP
Кроме того, эта функциональность не
относятся напрямую к предметной
области.
Примером такой функциональности
может являться например
протоколирование работы системы
(logging).
8. Spring AOP
Использование аспектно-
ориентированного программирования
помогает следовать принципу
разделения ответственности (separation
of concerns), что положительно
сказывается на многих характеристиках
разрабатываемой информационной
системы.
10. Основные понятия АОП
Точка соединения (joinpoint) — точка
в программе, где существует
возможность выполнить
дополнительный код средствами АОП.
Различные реализации АОП имеют
различные возможные точки
соединения, таковыми могут являться
момент вызова методов класса или
обращений к полям объекта.
11. Основные понятия АОП
Совет (advice) —класс,
реализующий сквозную
функциональность. Существуют
различные типа советов:
выполняемые до точки
соединения,
после
вместо неё.
12. Основные понятия АОП
Срез (pointcut) — точка
соединения (joinpoint), которая
выбрана для исполнения в ней
сквозной функциональности,
определенная советом (advice).
13. Основные понятия АОП
Аспект (aspect) — под аспектом
понимают комбинацию, состоящую из
среза (pointcut) и реализующего
сквозную функциональность совета
(advice). Аспект изменяет поведение
остального кода, исполняя совет в
точках соединения, определённых
некоторым срезом. В Spring для этого
используется также понятие advisor.
14. Основные понятия АОП
Внедрение или введение
(introduction) — под этим термином
понимают процесс модификации
объекта путем добавления
дополнительных полей и /или методов.
Внедрение также может быть
использовано для реализации
объектом интерфейса без явного
указания этого в классе объекта.
16. Основные понятия АОП
Цель или целевой объект (target) –
объект, являющийся результатом
связывания (weaving), то есть
реализующий первоначальную бизнес
логику плюс сквозная
функциональность, выполненная
одним или несколькими аспектами.
17. Spring AOP
Существует два различных способа
реализации аспектно-ориентированного
программирования: статический и
динамический.
Эти способы различаются моментами
времени, когда происходит связывание
(weaving) и способом, как это
связывание происходит.
18. Spring AOP
Существует два различных способа
реализации аспектно-ориентированного
программирования: статический и
динамический.
Эти способы различаются моментами
времени, когда происходит связывание
(weaving) и способом, как это
связывание происходит.
19. Статическое АОП
При статической реализации аспектно-
ориентированного программирования
связывание является отдельным шагом
в процессе построения программного
продукта (build process) путем
модификации байт-кода (bytecode)
классов, изменяя и дополняя его
необходимым образом.
20. Динамическое АОП
В динамическом АОП процесс
связывания (weaving) происходит
динамически в момент исполнения. В
Spring Framework используется именно
такой способ связывания и это
реализовано с помощью использования
специальных объектов-посредников
(proxy) для объектов, к которым должны
быть применены советы (advice).
23. Динамическое АОП
Средствами Spring AOP
поддерживается только один вид точек
соединения (jointpoint) - вызовы
методов классов. Это является
существенным упрощением по
сравнению с такой тяжеловесной
реализацией АОП как AspectJ.
24. Динамическое АОП
Средствами Spring AOP
поддерживается только один вид точек
соединения (jointpoint) - вызовы
методов классов. Это является
существенным упрощением по
сравнению с такой тяжеловесной
реализацией АОП как AspectJ.
25. execution
execution - определяет точки
соединения на основании имени
метода. Наиболее часто используемое
выражение для определения jointpoint.
При использовании выражения
execution возможно указывать пакет,
имя класса, название метода,
видимость метода, тип возвращаемого
объекта и тип аргументов.
26. within
within - определяет возможные точки
соединения только у объектов
заданного типа или у классов,
определенных в заданном пакете и его
подпакетах.
27. this
this - определяет точки соединения для
всех объектов, у которых объект
посредника (AOP proxy) реализует
указанный в аннотации тип..
28. this
target - определяет точки соединения
для всех объектов, у которых целевой
объект (target) реализует указанный в
аннотации тип.
29. args
args - определяет точки соединения
сравнением аргументов вызываемого
метода с типами аргументов, указанных
в аннотации.
30. args
bean - определяет точки соединения
для управляемых компонентов (beans),
имеющих определенный в аннотации
идентификатор или имя (атрибуты id
или name компонента). При указании
имени бина возможно использовать
групповой символ (wildcard)
31. args
@annotation - задает точки соединения
для методов, которые были
«помечены» указанной аннотацией
32. @Before
Метод аспекта, помеченный @Before ,
будет вызван перед выполнением
метода целевого класса. В отличие от
аннотации @Around, избежать вызова
метода целевого класса возможно
только генерацией исключительной
ситуации (exception) внутри аспекта.
33. Ограничения
Аспект нельзя применить к static
методам и final классам. Это
обусловлено тем, что proxy-объекты
создаются путём наследования от
исходных классов (поэтому нельзя
создать proxy к final классу; по этой же
причине нельзя применить аспект к
static методу: static методы не
наследуются)
34. Ограничения
Spring AOP не умеет применять
аспекты к конструкторам и
свойствам класса.
Методы служащие точками
соединения (join point) должны
быть public.