30
AOP AspectJ vs Spring AOP Speaker: Курбатов Геннадий

Aop. Kurbatov Gennadii. Dnevnik.ru

Embed Size (px)

Citation preview

Page 1: Aop. Kurbatov Gennadii. Dnevnik.ru

AOPAspectJ vs Spring AOP

Speaker: Курбатов Геннадий

Page 2: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 3: Aop. Kurbatov Gennadii. Dnevnik.ru

Аспектно-ориентированное программирование

1. Что это такое и зачем оно нам??

2. Основные понятия AOP

3. AspectJ

4. Spring AOP

5. AspectJ & Spring AOP

Page 4: Aop. Kurbatov Gennadii. Dnevnik.ru

http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop

Page 5: Aop. Kurbatov Gennadii. Dnevnik.ru

http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop

Page 6: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 7: Aop. Kurbatov Gennadii. Dnevnik.ru

Основные понятия AOP

- Aspect — класс аспекта

- Advice — когда будем выполнять

- Before

- After returning

- After throwing

- After (finally)

- Around

- Join point — где будем выполнять

- Pointcut — комбинация Join Point

- Introduction — изменяем структуру

Page 8: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 9: Aop. Kurbatov Gennadii. Dnevnik.ru

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

http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop

Page 11: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 12: Aop. Kurbatov Gennadii. Dnevnik.ru

Аспект

Название среза

Указание, где применять

Аргументы

Возвращаемый тип

Совет

Срез точек выполнения

Изменение структурынаследованияи реализации

Метод

КлассПакет

Page 13: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 14: Aop. Kurbatov Gennadii. Dnevnik.ru

Примеры 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

Spring AOP

Page 16: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 17: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 18: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 20: Aop. Kurbatov Gennadii. Dnevnik.ru

Spring AOP APIs

Page 21: Aop. Kurbatov Gennadii. Dnevnik.ru

public interface Pointcut {

ClassFilter getClassFilter();

MethodMatcher getMethodMatcher();

}

Page 22: Aop. Kurbatov Gennadii. Dnevnik.ru

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

Некоторые из классов Pointcut

AspectJExpressionPointcut

AnnotationMatchingPointcut

JdkRegexpMethodPointcut

StaticMethodMatcherPointcut

Page 24: Aop. Kurbatov Gennadii. Dnevnik.ru

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

Advisor API

RegexpMethodPointcutAdvisor

AspectJPointcutAdvisor

DefaultPointcutAdvisor

Page 26: Aop. Kurbatov Gennadii. Dnevnik.ru

AspectJ vs Spring AOP

Page 27: Aop. Kurbatov Gennadii. Dnevnik.ru

Альтернативные реализации AOP в Java

JBoss AOP — jbossaop.jboss.orgВыпущен в 2004 как дополнение к среде сервера приложений JBoss

JAC - jac.ow2.org

Page 28: Aop. Kurbatov Gennadii. Dnevnik.ru

AOP в других ЯП

PostSharp - для платформы .NET

Python — встроенные декораторы

JavaScript — реализация в виде оберток(а-ля proxy)

AspectC++ - www.aspectc.org

Page 29: Aop. Kurbatov Gennadii. Dnevnik.ru
Page 30: Aop. Kurbatov Gennadii. Dnevnik.ru