Upload
wertklop-
View
125
Download
5
Embed Size (px)
Citation preview
AOPAspectJ vs Spring AOP
Speaker: Курбатов Геннадий
Аспектно-ориентированное программирование
1. Что это такое и зачем оно нам??
2. Основные понятия AOP
3. AspectJ
4. Spring AOP
5. AspectJ & Spring AOP
http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop
http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop
Основные понятия AOP
- Aspect — класс аспекта
- Advice — когда будем выполнять
- Before
- After returning
- After throwing
- After (finally)
- Around
- Join point — где будем выполнять
- Pointcut — комбинация Join Point
- Introduction — изменяем структуру
AspectJ
AspectJ Runtime — необходимые классы, аннотации и т. д. для работы в runtimecompile "org.aspectj:aspectjrt:${aspectjVersion}"
AspectJ Tools — необходимые классы для компиляции аспектовcompile "org.aspectj:aspectjtools:${aspectjVersion}"
AspectJ Weaver - «сплетает» аспекты с java-классами в runtimecompile "org.aspectj:aspectjweaver:${aspectjVersion}"
http://www.slideshare.net/rohitsghatol/aspect-oriented-prog-with-aspectj-spring-aop
Аспект
Название среза
Указание, где применять
Аргументы
Возвращаемый тип
Совет
Срез точек выполнения
Изменение структурынаследованияи реализации
Метод
КлассПакет
Примеры 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)
Spring AOP
Implementing dynamic proxies – a comparison
Spring AOP APIs
public interface Pointcut {
ClassFilter getClassFilter();
MethodMatcher getMethodMatcher();
}
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);}
Некоторые из классов Pointcut
AspectJExpressionPointcut
AnnotationMatchingPointcut
JdkRegexpMethodPointcut
StaticMethodMatcherPointcut
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;}
Advisor API
RegexpMethodPointcutAdvisor
AspectJPointcutAdvisor
DefaultPointcutAdvisor
AspectJ vs Spring AOP
Альтернативные реализации AOP в Java
JBoss AOP — jbossaop.jboss.orgВыпущен в 2004 как дополнение к среде сервера приложений JBoss
JAC - jac.ow2.org
AOP в других ЯП
PostSharp - для платформы .NET
Python — встроенные декораторы
JavaScript — реализация в виде оберток(а-ля proxy)
AspectC++ - www.aspectc.org