7. Основные понятия AOP
- Aspect — класс аспекта
- Advice — когда будем выполнять
- Before
- After returning
- After throwing
- After (finally)
- Around
- Join point — где будем выполнять
- Pointcut — комбинация Join Point
- Introduction — изменяем структуру
8.
9. AspectJ
AspectJ Runtime — необходимые классы, аннотации и т. д. для работы в runtime
compile "org.aspectj:aspectjrt:${aspectjVersion}"
AspectJ Tools — необходимые классы для компиляции аспектов
compile "org.aspectj:aspectjtools:${aspectjVersion}"
AspectJ Weaver - «сплетает» аспекты с java-классами в runtime
compile "org.aspectj:aspectjweaver:${aspectjVersion}"
12. Аспект
Название среза
Указание, где применять
Аргументы
Возвращаемый тип
Совет
Срез точек выполнения
Изменение структуры
наследования
и реализации
Метод
Класс
Пакет
22. public interface ClassFilter {
boolean matches(Class clazz);
}
//Ограничение по методам
public interface MethodMatcher {
boolean matches(Method m, Class targetClass);
//мб использован, когда AOP proxy создан и не нужно
//больше выполнять метод invoke прокси
boolean isRuntime();
boolean matches(Method m, Class targetClass, Object[] args);
}
23. Некоторые из классов Pointcut
AspectJExpressionPointcut
AnnotationMatchingPointcut
JdkRegexpMethodPointcut
StaticMethodMatcherPointcut
27. Альтернативные реализации AOP в Java
JBoss AOP — jbossaop.jboss.org
Выпущен в 2004 как дополнение к среде сервера приложений JBoss
JAC - jac.ow2.org
28. AOP в других ЯП
PostSharp - для платформы .NET
Python — встроенные декораторы
JavaScript — реализация в виде оберток(а-ля proxy)
AspectC++ - www.aspectc.org