Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
AOP – Aspect Oriented Programming
2
AOP – Aspect Oriented Programming
11/15/2018 AOP – Aspect Oriented Programming KArol Muszyński, PJWSTK HP_presentation_template
3
Agenda Wprowadzenie do tematu Hello World
11/15/2018 Agenda Wprowadzenie do tematu Hello World Implementacje. Dlaczego AspectWerkz 2.X !? Wykorzystanie AOP November 15, 2018 HP_presentation_template
4
11/15/2018 Idea AOP November 15, 2018 HP_presentation_template
5
AOP – podstawowe pojęcia
Pointcut (join point) – definiuje punkt w trakcie wykonywania programu Advice – definiuje część implementacji aspektu, która ma być wykonynana w momencie natrafienia na pointcut Aspect – jest złączeniem powyższych dwóch elementów Weaving – wplatanie aspektów w istniejący kod November 15, 2018
6
Punkty wplatania aspektów
method execution (wykonanie metody) method call (wywołanie metody) constructor execution (wykonanie konstruktora) constructor call (wywołanie konstruktora) field access (dostęp do pola) field modification (modyfikacja pola) catch handlers (przechwycenie wyjątku) static initialization (statyczna inicjalizacja klasy) November 15, 2018
7
Agenda Wprowadzenie do tematu Hello World
11/15/2018 Agenda Wprowadzenie do tematu Hello World Implementacje. Dlaczego AspectWerkz 2.X !? Wykorzystanie AOP November 15, 2018 HP_presentation_template
8
Hello World 1 – aop.xml <aspectwerkz>
<system id="samples"> <aspect class="MyAspects"> <pointcut name="methodsToLog" expression="execution(* examples.TraceMe*.*(..))"/> <advice name="logMethod(StaticJoinPoint)" type="around" bind-to="methodsToLog"/> <advice name="logBefore(StaticJoinPoint)" type="before" bind-to="methodsToLog"/> <advice name="logAfter(StaticJoinPoint)" type="after" bind-to="methodsToLog"/> </aspect> </system> </aspectwerkz> November 15, 2018
9
Hello World 1 – klasy public class TraceMe {
public static void main(String args[]) throws Throwable { TraceMe tm = new TraceMe (); tm.targetB(); tm.targetA(); } public void targetB() {} public void targetA() {} public static class MyAspects { public void logMethod(JoinPoint jp) { } public void logBefore(JoinPoint jp) { } public void logAfter(JoinPoint jp) { } November 15, 2018
10
Hello World 2 – klasa /* @Aspect(”perJVM”) */
public static class MyAspects { TraceMe*.*(..))”) */ Pointcut methodsPointCut; */ public void logMethod(JoinPoint jp) { } */ public void logBefore(JoinPoint jp) { } */ public void logAfter(JoinPoint jp) { } } November 15, 2018
11
Hello World 2 – aop.xml <aspectwerkz>
<system id="samples"> <aspect class="MyAspects"/> </system> </aspectwerkz> November 15, 2018
12
Hello World 3 (Java 5) – aspekty
@Aspect(”perJVM”) public static class MyAspects { @Expression(”execution(* TraceMe*.*(..))”) Pointcut methodsPointCut; @Around(”methodsPointCut”) public void logMethod(JoinPoint jp) { } @Before(”methodsPointCut”) public void logBefore(JoinPoint jp) { } @AfterFinally(”methodsPointCut”) public void logAfter(JoinPoint jp) { } } November 15, 2018
13
Agenda Wprowadzenie do tematu Hello World
11/15/2018 Agenda Wprowadzenie do tematu Hello World Implementacje. Dlaczego AspectWerkz 2.X !? Wykorzystanie AOP November 15, 2018 HP_presentation_template
14
Implementacje AOP Aspectj 1.2 - http://eclipse.org/aspectj
11/15/2018 Implementacje AOP Aspectj Jboss AOP AspectWerkz AspectWerkz 2.X RC 2 - November 15, 2018 HP_presentation_template
15
Dlaczego AspectWerkz 2.X !?
Nie trzeba wkompilowywać aspektów w źródła naszej aplikacji Hot deployment and undeployment of aspects AspectWerkz Extensible Aspect Container StaticJoinPoint vs. JoinPoint New annotation backend and Java 5 annotations support November 15, 2018
16
Architektura November 15, 2018
17
Benchmark Z aktualizowany benchmark November 15, 2018
18
Wydajność AspectWerkz 2.x
Since the weaver in AspectWerkz 2.X is compiling everything statically, meaning that the output of the weaver is code that is statically compiled and verified, spring (and any other framework) will benefit from that. Statically compiled code can be highly tuned and optimized and no reflection is needed. This means that we don't have to perform all the expensive plumbing needed in a reflective model. E.G.: No casting No boxing and unboxing of primitives No wrapping (and unwrapping) of parameters in an object array that needs to be allocated at each invocation (and maintained throughout the invocation flow) No reflective invocations November 15, 2018
19
Agenda Wprowadzenie do tematu Hello World
11/15/2018 Agenda Wprowadzenie do tematu Hello World Implementacje. Dlaczego AspectWerkz 2.0 !? Wykorzystanie AOP November 15, 2018 HP_presentation_template
20
Wykorzystanie i przyszłość AOP
AOP, a OOP Jeśli wydaje Ci się, że AOP jest idealnym rozwiązaniem Twojego problemu to znaczy, że źle do niego podchodzisz używając OOP Powstanie wzorców projektowych opartych na AOP SpringAOP i JBossAOP AOP jako narzędzie do debug-owania aplikacji Logowanie November 15, 2018
21
Linki November 15, 2018
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.