SlideShare a Scribd company logo
AOP med AspectJ
                    - en introduktion


                     Mattias Jiderhamn


Mattias Jiderhamn
Om talaren
@author AspectJ weaver plugin för IntelliJ IDEA




  ! (this instanceof AspectJWizard)




Mattias Jiderhamn
Kort historik
                AspectJ (2001)
                           AspectWerkz (2002)




             AspectJ 1.5 (2005)
Mattias Jiderhamn
Hög tröskel
  Recept för AOP:
  1 del Mumbo Jumbo
  1 del Hokus Pokus


          Recipie for
          disaster…?


Mattias Jiderhamn
Mumbo Jumbo
  •   Cross-cutting concern
  •   Join point
  •   Pointcut
  •   Advice
  •   Aspect
  •   Weaving
  •   Inter-type declaration
  •   Mixin
  •   cflow
Mattias Jiderhamn
Cross-cutting concern
     Behov 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

  AOP LINE - DO CROSS   AOP LINE - DO CROSS


  Exempel: metodanrop
Mattias Jiderhamn
Cross-cutting concern

                    Loggning Behörighet Transaktioner

   Artikel
   modul
                                                 Join point

Kund-modul

Data-access

  REST API

Mattias Jiderhamn
Pointcut
    Deklarationen av en join point.
   Definierar var skall något hända.
      Tillåter ofta kombinationer
            av 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
                                  ”Advised”

    Klass A          Weaving        Klass A’

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
Mixin
Fö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
.aj
  aspect Logging {

      pointcut pc() : execution(public
        static void main(String[]));

      before() : pc() {
        System.out.println(”foo");
      }
  }

Mattias Jiderhamn
Demo




Mattias Jiderhamn
call() vs execution()
                    call()


class A {                              class B {
  void a() {                             void b() {
    b.b();                                 ...
  }                                      }
}                                      }
                         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?

Mattias Jiderhamn

More Related Content

PPTX
Memory Management: What You Need to Know When Moving to Java 8
PPT
Kodgranskning - i en agil miljö
PPTX
ClassLoader Leaks
PDF
Java 8 Launch - MetaSpaces
PPTX
A topology of memory leaks on the JVM
PPTX
The Java Memory Model
ODP
Java GC, Off-heap workshop
PDF
Javaforum coin
Memory Management: What You Need to Know When Moving to Java 8
Kodgranskning - i en agil miljö
ClassLoader Leaks
Java 8 Launch - MetaSpaces
A topology of memory leaks on the JVM
The Java Memory Model
Java GC, Off-heap workshop
Javaforum coin
Ad

Introduktion till Aspekt-orienterad programmering (AOP) med AspectJ

  • 1. AOP med AspectJ - en introduktion Mattias Jiderhamn Mattias Jiderhamn
  • 2. Om talaren @author AspectJ weaver plugin för IntelliJ IDEA ! (this instanceof AspectJWizard) Mattias Jiderhamn
  • 3. Kort historik AspectJ (2001) AspectWerkz (2002) AspectJ 1.5 (2005) Mattias Jiderhamn
  • 4. Hög tröskel Recept för AOP: 1 del Mumbo Jumbo 1 del Hokus Pokus Recipie for disaster…? Mattias Jiderhamn
  • 5. Mumbo Jumbo • Cross-cutting concern • Join point • Pointcut • Advice • Aspect • Weaving • Inter-type declaration • Mixin • cflow Mattias Jiderhamn
  • 6. Cross-cutting concern Behov som går på tvären igenom flera lager och/eller moduler. Exempel: •Loggning •Auktorisering •Transaktioner •Datavalidering Mattias Jiderhamn
  • 7. Join point Punkter där det är möjligt att applicera ett cross-cutting concern AOP LINE - DO CROSS AOP LINE - DO CROSS Exempel: metodanrop Mattias Jiderhamn
  • 8. Cross-cutting concern Loggning Behörighet Transaktioner Artikel modul Join point Kund-modul Data-access REST API Mattias Jiderhamn
  • 9. Pointcut Deklarationen av en join point. Definierar var skall något hända. Tillåter ofta kombinationer av flera join points. Exempel: ”när metoden B.a() anropas ELLER exceptionet Foo fångas i klassen Bar” Mattias Jiderhamn
  • 10. Advice Implementationen av ett cross-cutting concern Vad skall hända Mattias Jiderhamn
  • 11. Aspect Modul innehållande pointcuts och advice Var + Vad Mattias Jiderhamn
  • 12. Weaving Processen när advice appliceras på angivna pointcuts ”Advised” Klass A Weaving Klass A’ Mattias Jiderhamn
  • 13. 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
  • 14. Mixin Förenklat: Annat namn på inter-type declarations (från AspectWerkz) Mattias Jiderhamn
  • 16. Hokus Pokus • Älskar Java och Open Source pga avsaknaden av Hokus Pokus • Få undantag (serialization) • AOP innebär Hokus Pokus… Mattias Jiderhamn
  • 17. Fyra metoder • Proxy + InvocationHandler • CGLIB • java.lang.instrument + -javaagent • Compile time weaving (”riktig AOP”) Mattias Jiderhamn
  • 18. Två syntaxer • .aj (AspectJ) • Annoteringar (AspectWerkz) Mattias Jiderhamn
  • 19. .aj aspect Logging { pointcut pc() : execution(public static void main(String[])); before() : pc() { System.out.println(”foo"); } } Mattias Jiderhamn
  • 21. call() vs execution() call() class A { class B { void a() { void b() { b.b(); ... } } } } execution() Mattias Jiderhamn
  • 22. Avslutande råd • AOP + TDD = sant • Använd AOP med måtta Mattias Jiderhamn
  • 23. Länkar http://eclipse.org/aspectj http://java.jiderhamn.se https://github.com/mjiderhamn/aspectj-intro Frågor? Mattias Jiderhamn