introduktion till aspekt-orienterad programmering (aop) med aspectj
TRANSCRIPT
Mattias Jiderhamn
AOP med AspectJ- en introduktion
Mattias Jiderhamn
Mattias Jiderhamn
! (this instanceof AspectJWizard)! (this instanceof AspectJWizard)
@author AspectJ weaver plugin för IntelliJ IDEA
Om talaren
Mattias Jiderhamn
AspectJ (2001)
AspectWerkz (2002)
AspectJ 1.5 (2005)
AspectWerkz (2002)
Kort historik
Mattias Jiderhamn
Hög tröskelRecept för AOP:
1 del Mumbo Jumbo
1 del Hokus Pokus
Recipie fordisaster…?
Mattias Jiderhamn
Mumbo Jumbo• Cross-cutting concern• Join point• Pointcut• Advice• Aspect• Weaving• Inter-type declaration• Mixin• cflow
Mattias Jiderhamn
Cross-cutting concernBehov som går på tvären igenom
flera lager och/eller moduler.Exempel:•Loggning•Auktorisering•Transaktioner•Datavalidering
Mattias Jiderhamn
Join point
Punkter där det är möjligt
att applicera ett
cross-cutting concern
Exempel: metodanrop
AOP LINE - DO CROSS AOP LINE - DO CROSS
Mattias Jiderhamn
Loggning Behörighet Transaktioner
Artikel modul
Kund-modul
Data-access
REST API
Cross-cutting concern
Join point
Mattias Jiderhamn
Pointcut
Deklarationen av en join point.
Definierar var skall något hända.
Tillåter ofta kombinationerav flera join points.
Exempel: ”när metoden B.a() anropas ELLER exceptionet Foo fångas i klassen Bar”
Mattias Jiderhamn
Advice
Implementationen av ett
cross-cutting concern
Vad skall hända
Mattias Jiderhamn
Aspect
Modul innehållande
pointcuts och advice
Var + Vad
Mattias Jiderhamn
Weaving
Processen när advice appliceras
på angivna pointcuts
Klass A Klass A’Weaving
”Advised”
Mattias Jiderhamn
Inter-type declaration
Lägg till deklarationer till en eller flera (redan kompilerade) klasser•Fält•Metoder•Konstruktorer•Interface•Bas-klasser (”multipelt arv”)
Mattias Jiderhamn
MixinFörenklat: Annat namn på inter-type
declarations (från AspectWerkz)
Mattias Jiderhamn
cflow
Mattias Jiderhamn
Hokus Pokus• Älskar Java och Open Source pga
avsaknaden av Hokus Pokus• Få undantag (serialization)• AOP innebär Hokus Pokus…
Mattias Jiderhamn
Fyra metoder• Proxy + InvocationHandler• CGLIB
• java.lang.instrument + -javaagent• Compile time weaving (”riktig AOP”)
Mattias Jiderhamn
Två syntaxer• .aj (AspectJ)• Annoteringar (AspectWerkz)
Mattias Jiderhamn
.ajaspect Logging {
pointcut pc() : execution(public
static void main(String[]));
before() : pc() {
System.out.println(”foo");
}
}
Mattias Jiderhamn
Demo
Mattias Jiderhamn
call() vs execution()
class A {
void a() {
b.b();
}
}
class B {
void b() {
...
}
}
call()
execution()
Mattias Jiderhamn
Avslutande råd• AOP + TDD = sant• Använd AOP med måtta
Mattias Jiderhamn
Länkar
http://eclipse.org/aspectj
http://java.jiderhamn.se
https://github.com/mjiderhamn/aspectj-intro
Frågor?