introduktion till aspekt-orienterad programmering (aop) med aspectj

23
Mattias Jiderhamn AOP med AspectJ - en introduktion Mattias Jiderhamn

Upload: mattias-jiderhamn

Post on 08-Jul-2015

3.395 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

AOP med AspectJ- en introduktion

Mattias Jiderhamn

Page 3: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

AspectJ (2001)

AspectWerkz (2002)

AspectJ 1.5 (2005)

AspectWerkz (2002)

Kort historik

Page 4: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Hög tröskelRecept för AOP:

1 del Mumbo Jumbo

1 del Hokus Pokus

Recipie fordisaster…?

Page 5: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Mumbo Jumbo• Cross-cutting concern• Join point• Pointcut• Advice• Aspect• Weaving• Inter-type declaration• Mixin• cflow

Page 6: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Cross-cutting concernBehov som går på tvären igenom

flera lager och/eller moduler.Exempel:•Loggning•Auktorisering•Transaktioner•Datavalidering

Page 7: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

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

Page 8: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Loggning Behörighet Transaktioner

Artikel modul

Kund-modul

Data-access

REST API

Cross-cutting concern

Join point

Page 9: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

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”

Page 10: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Advice

Implementationen av ett

cross-cutting concern

Vad skall hända

Page 11: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Aspect

Modul innehållande

pointcuts och advice

Var + Vad

Page 12: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Weaving

Processen när advice appliceras

på angivna pointcuts

Klass A Klass A’Weaving

”Advised”

Page 13: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

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”)

Page 14: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

MixinFörenklat: Annat namn på inter-type

declarations (från AspectWerkz)

Page 15: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

cflow

Page 16: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Hokus Pokus• Älskar Java och Open Source pga

avsaknaden av Hokus Pokus• Få undantag (serialization)• AOP innebär Hokus Pokus…

Page 17: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Fyra metoder• Proxy + InvocationHandler• CGLIB

• java.lang.instrument + -javaagent• Compile time weaving (”riktig AOP”)

Page 18: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Två syntaxer• .aj (AspectJ)• Annoteringar (AspectWerkz)

Page 19: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

.ajaspect Logging {

pointcut pc() : execution(public

static void main(String[]));

before() : pc() {

System.out.println(”foo");

}

}

Page 20: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Demo

Page 21: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

call() vs execution()

class A {

void a() {

b.b();

}

}

class B {

void b() {

...

}

}

call()

execution()

Page 22: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Avslutande råd• AOP + TDD = sant• Använd AOP med måtta

Page 23: Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

Mattias Jiderhamn

Länkar

http://eclipse.org/aspectj

http://java.jiderhamn.se

https://github.com/mjiderhamn/aspectj-intro

Frågor?