aop. kurbatov gennadii. dnevnik.ru
TRANSCRIPT
![Page 1: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/1.jpg)
AOPAspectJ vs Spring AOP
Speaker: Курбатов Геннадий
![Page 2: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/2.jpg)
![Page 3: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/3.jpg)
Аспектно-ориентированное программирование
1. Что это такое и зачем оно нам??
2. Основные понятия AOP
3. AspectJ
4. Spring AOP
5. AspectJ & Spring AOP
![Page 4: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/4.jpg)
http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop
![Page 5: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/5.jpg)
http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop
![Page 6: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/6.jpg)
![Page 7: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/7.jpg)
Основные понятия AOP
- Aspect — класс аспекта
- Advice — когда будем выполнять
- Before
- After returning
- After throwing
- After (finally)
- Around
- Join point — где будем выполнять
- Pointcut — комбинация Join Point
- Introduction — изменяем структуру
![Page 8: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/8.jpg)
![Page 9: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/9.jpg)
AspectJ
AspectJ Runtime — необходимые классы, аннотации и т. д. для работы в runtimecompile "org.aspectj:aspectjrt:${aspectjVersion}"
AspectJ Tools — необходимые классы для компиляции аспектовcompile "org.aspectj:aspectjtools:${aspectjVersion}"
AspectJ Weaver - «сплетает» аспекты с java-классами в runtimecompile "org.aspectj:aspectjweaver:${aspectjVersion}"
![Page 10: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/10.jpg)
http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop
![Page 11: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/11.jpg)
![Page 12: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/12.jpg)
Аспект
Название среза
Указание, где применять
Аргументы
Возвращаемый тип
Совет
Срез точек выполнения
Изменение структурынаследованияи реализации
Метод
КлассПакет
![Page 13: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/13.jpg)
![Page 14: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/14.jpg)
Примеры Pointcut
execution(public * *(..))
execution(* set*(..))
execution(* com.xyz.service.AccountService.*(..))
execution(* com.xyz.service.*.*(..))
execution(* com.xyz.service..*.*(..))
within(com.xyz.service.*)
within(com.xyz.service..*)
this(com.xyz.service.AccountService)
target(com.xyz.service.AccountService)
args(java.io.Serializable)
@annotation(org.springframework.transaction.annotation.Transactional)
![Page 15: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/15.jpg)
Spring AOP
![Page 16: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/16.jpg)
![Page 17: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/17.jpg)
![Page 18: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/18.jpg)
![Page 19: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/19.jpg)
Implementing dynamic proxies – a comparison
![Page 20: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/20.jpg)
Spring AOP APIs
![Page 21: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/21.jpg)
public interface Pointcut {
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
![Page 22: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/22.jpg)
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);}
![Page 23: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/23.jpg)
Некоторые из классов Pointcut
AspectJExpressionPointcut
AnnotationMatchingPointcut
JdkRegexpMethodPointcut
StaticMethodMatcherPointcut
![Page 24: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/24.jpg)
public interface Advice {
}public interface MethodInterceptor extends Interceptor {
Object invoke(MethodInvocation invocation) throws Throwable;}
public interface MethodBeforeAdvice extends BeforeAdvice {
void before(Method method, Object[] args, Object target) throws Throwable;}
public interface AfterReturningAdvice extends AfterAdvice {
void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable;}
![Page 25: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/25.jpg)
Advisor API
RegexpMethodPointcutAdvisor
AspectJPointcutAdvisor
DefaultPointcutAdvisor
![Page 26: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/26.jpg)
AspectJ vs Spring AOP
![Page 27: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/27.jpg)
Альтернативные реализации AOP в Java
JBoss AOP — jbossaop.jboss.orgВыпущен в 2004 как дополнение к среде сервера приложений JBoss
JAC - jac.ow2.org
![Page 28: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/28.jpg)
AOP в других ЯП
PostSharp - для платформы .NET
Python — встроенные декораторы
JavaScript — реализация в виде оберток(а-ля proxy)
AspectC++ - www.aspectc.org
![Page 29: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/29.jpg)
![Page 30: Aop. Kurbatov Gennadii. Dnevnik.ru](https://reader031.vdocuments.net/reader031/viewer/2022021918/589aeb561a28abee708b6b83/html5/thumbnails/30.jpg)