AOP - підхід до архітектури ПЗ, метою якого є збільшити модульність системи шляхом виділення cross-cutting concerns - елементів спільних для різних шарів абстракції. Використовується наприклад для відокремлення бізнес логіки від службової логіки. Реалізується за допомогою AspectJ та Spring AOP.
Joint points - точки приєднання - події, що виникають протягом виконання програми (виклик методу, створення об'єктів ітд).
Pointcut - шаблон за яким вибираються joint points. По суті шукає методи, де можна застосувати Advice . Поінткат можна перевикористовувати задавши його як метод, а також комбінувати використовуючи логічні операції.
execution( modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(parameters -pattern) throws-pattern )
- ? - не обов'язкове поле
- "*" - будь-яка одна змінна
- .. - нуль або більше будь яких параметрів
execution(public void *(*)
- будь-який public метод з return type void
, з будь яким іменем методу, з одним довільним параметром.
execution(public * get*(..)
- убдь-який public метод з будь яким return type, з іменем, що починається з get, з будь-якою кількістю довільних параметрів (нуль і більше).
Advice - код який вставляється у вибрані нами місця. В joint points через pointcuts.
- Before
- AfterReturning - Виконується лише після нормального виконання цільового методу, може перехоплювати (і змінювати) результат методу.
- After throwing - Виконується після ексепшна, може перехоплювати об'єкт ексепшна.
- After / After finally - Виконується після методу в будь якому випадку, не залежно від результату. Не дає можливість перехоплювати ні результат ні ексепшн.
- Around - Виконується і до і після методу. Можна міняти сам метод і його результати. Замість JoinPoint працює з ProceedingJoinPoint.
Advice i pointcut складають собою аспект.
Точка (момент) в програмі, коли застосовується advice. Якщо в параметри едвайсу вписати джоінт поінт, то можна отримати інформацію про сигнатуру методу.
Weaving (переплетення) - процес вставки advice в тіло програми.
- compile time weaving
- post-compile weaving
- load-time weaving