SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Downloaden Sie, um offline zu lesen
Bessere Software durch
aspektorientierte Programmierung
mit Java und AspectJ
                         Stand: 26.11.2007
Gliederung


                 I.     Einleitung


                 II.    Was ist AOP?
                            Motivation
                            Konzepte und Begriffe


                 III.   Überblick über AspectJ
                            „Hello World“
                            Sprachumfang im Überblick
                            Tools


                 IV.    AspectJ in der Praxis
                            Performance-Logging
                            Design by Contract
                            JavaBeans Bound Properties


                 V.     Optional: AspectJ Load Time Weaving und Eclipse Plug-ins


                 VI.    Fazit und Diskussion


©                                            Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 2
Einleitung



    Vorstellung
     Heiko Seeberger
     36 Jahre
     Market Unit Manager of Enterprise Architecture bei metafinanz
     OO-Kenntnisse seit 1993, Java seit 1999
     Schwerpunkte: AspectJ, Eclipse und SOA
     Aktiver Open Source Contributor




©                                      Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 3
Gliederung


                 I.     Einleitung


                 II.    Was ist AOP?
                            Motivation
                            Konzepte und Begriffe


                 III.   Überblick über AspectJ
                            „Hello World“
                            Sprachumfang im Überblick
                            Tools


                 IV.    AspectJ in der Praxis
                            Performance-Logging
                            Design by Contract
                            JavaBeans Bound Properties


                 V.     Optional: AspectJ Load Time Weaving und Eclipse Plug-ins


                 VI.    Fazit und Diskussion


©                                            Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 4
Motivation



    Seperation of Concerns
      Herausforderung: Komplexität
      Ansatz: Problemstellung in überschaubare und disjunkte „Häppchen“ (Belange) zerlegen.
      Ergebnis:
        Verständliche Anforderungen
        Klare Konzepte
        Hochwertige Lösungen
        Höherer Grad an Wiederverwendung


    => Modularisierung ist gut!


      Objektorientierung (OO) fördert Modularisierung:
        Packages
        Klassen
        Methoden
        …


©                                          Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 5
Motivation



    Modularisierung broken
      OO vermag i.d.R. nicht, alle Belange zu modularisieren.
      Manche Belange durchsetzen die OO-Module: Cross-cutting Concerns.


                       ClassA          ClassB                   ClassC

                                     ConcernX
                     ConcernX
                                                              ConcernX



      Scattering: Belange sind auf mehrere Module verteilt.
      Tangling: Module enthalten mehrere Belange.


    => Die Software könnte noch besser (verständlicher, wartbarer , wiederverbendbarer etc.) sein.



©                                       Bessere Software durch AOP mit Java und AspectJ      26.11.2007 - Seite 6
AOP-Konzepte



    AOP modularisiert Cross-cutting Concerns
     AOP führt neben Klassen Aspekte ein.
     Cross-cutting Concerns werden von Klassen in Aspekte verlagert.


                      ClassA         ClassB                   ClassC                    AspectX

                                   ConcernX
                    ConcernX                                                            ConcernX
                                                            ConcernX




    => Jedes Modul behandelt genau einen Belang => Vollständige Modularisierung.




©                                     Bessere Software durch AOP mit Java und AspectJ              26.11.2007 - Seite 7
AOP-Konzepte



    Weaving
     Herausforderung: Die separierten Belange wieder zusammenführen.
     Ansatz: Dieser Vorgang wird mit Weaving („Weben“) bezeichnet.


                      ClassA           ClassB                   ClassC                    AspectX

                                     ConcernX
                    ConcernX                                                              ConcernX
                                                              ConcernX




     Ergebnis: Die vormals separierten Belange „spielen wieder zusammen“.
     Mehrere Strategien:
      Precompiler.
      Compile-time Weaving: Beim/nach dem Compilieren (Java).
      Load-time Weaving: Beim Class Loading (Java).

©                                       Bessere Software durch AOP mit Java und AspectJ              26.11.2007 - Seite 8
Gliederung


                 I.     Einleitung


                 II.    Was ist AOP?
                            Motivation
                            Konzepte und Begriffe


                 III.   Überblick über AspectJ
                            „Hello World“
                            Sprachumfang im Überblick
                            Tools


                 IV.    AspectJ in der Praxis
                            Performance-Logging
                            Design by Contract
                            JavaBeans Bound Properties


                 V.     Optional: AspectJ Load Time Weaving und Eclipse Plug-ins


                 VI.    Fazit und Diskussion


©                                            Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 9
Sprachumfang im Überblick



    Hello World




                                                                                  Demo




©                               Bessere Software durch AOP mit Java und AspectJ          26.11.2007 - Seite 10
Sprachumfang im Überblick



    Anatomie von Aspekten



                1        Dynamic cross-cutting



                2        Static cross-cutting




©                               Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 11
Dynamic cross-cutting



    Dynamische Aspekte von Aspekten
     Joinpoints sind Programmstellen, an denen Weaving ansetzen kann, z.B.
       Methoden-Aufrufe, Feldzugriffe, Instantiierung etc.
     Pointcuts definieren bestimmte Mengen von Joinpoints, z.B.
       „alle Methoden-Aufrufe“ oder „alle Methoden-Aufrufe der Klasse X mit einem Parameter“ oder …
     Advices enthalten die Belange und steuern unter Bezug auf Pointcuts das Weaving,
       z.B. „Vor PointcutX soll dieser Belang eingewoben werden“.




©                                           Bessere Software durch AOP mit Java und AspectJ           26.11.2007 - Seite 12
Static cross-cutting



    Klassen „aufbohren“
     Hinzufügen von Feldern, Methoden und Konstruktoren.
     „Gewöhnliche“ Syntax mit vorangestelltem Klassennamen.




                                                                                          Demo




©                                   Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 13
Static cross-cutting



    Eltern adoptieren
     Typen erweitern, d.h. neue extends hinzufügen.
     Interfaces implementieren, d.h. neue implements hinzufügen.



                                                                                           Demo




©                                    Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 14
Static cross-cutting



    Default-Implementierungen für Interfaces
     Hinzufügen von Feldern und Methoden-Implementierungen zu Interfaces!




                                                                                           Demo




     Macht gemixte Methoden direkt zugreifbar.




©                                    Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 15
Static cross-cutting



    Eigene Compiler-Meldungen
     Anhand von statischen Pointcuts gibt der AspectJ-Compiler Fehler oder Warnungen aus.
     Nützlich für die Qualitätssicherung:
       Nutzung von unerwünschtem Code verhindern.
       Einhalten von Richtlinien sicherstellen.




                                                                                                Demo




©                                       Bessere Software durch AOP mit Java und AspectJ     26.11.2007 - Seite 16
Gliederung


                 I.     Einleitung


                 II.    Was ist AOP?
                            Motivation
                            Konzepte und Begriffe


                 III.   Überblick über AspectJ
                            „Hello World“
                            Sprachumfang im Überblick
                            Tools


                 IV.    AspectJ in der Praxis
                            Performance-Logging
                            Design by Contract
                            JavaBeans Bound Properties


                 V.     Optional: AspectJ Load Time Weaving und Eclipse Plug-ins


                 VI.    Fazit und Diskussion


©                                            Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 17
Performance-Logging



    Ein Praxisbeispiel
     Reporting von Performance-Kennzahlen aus dem laufenden Betrieb.
     Messung der Ausführungsdauer von Anwendungsfällen.
     Kommt im Kernsystem der Allianz Versicherung zum Einsatz.




©                                   Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 18
Design by Contract



    Verbindliche Schnittstellen
     Design by Contract: Klare Vorgaben, was vom API erwartet und geliefert wird.
       Preconditions definieren die Erwartungshaltung.
       Postconditions beschreiben die Liefergarantien.


     Erfolgsfaktoren:
       Contracts müssen klar kommuniziert werden => Nutzer des API wissen Bescheid.
       Contracts dürfen nicht gebrochen werden können => Herausgeber des API kann sich verlassen.
       Die Umsetzung muss einfach sein.


     „Zweitbeste“ Lösung:
       Contracts in JavaDoc beschreiben. => Vollständig? Refactoring?
                                                                                                        Demo
       Contracts in den Implementierungen umsetzen, d.h. durch den Nutzer. => Verlässlichkeit?
       Mühsame Ansatz, oft redundanter Code.




©                                          Bessere Software durch AOP mit Java und AspectJ          26.11.2007 - Seite 19
Design by Contract



    ContractJ (www.aspectbrains.org/contractj)
     Bessere Lösung:
       Annotations markieren Contracts.
       Aspekte implementieren Contracts.




©                                          Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 20
Design by Contract



    ContractJ
     Annotations sind ausdrucksstark. => Klare Kommunikation der Contracts.
     Annotations identifizieren und beschreiben Contracts gleichzeitig. => Vollständig und konsistent.
     Aspekte liegen in der Hoheit des API-Herausgebers. => Hohes Maß an Verlässlichkeit.

     Weiterführende Informationen siehe Eclipse Magazin Vol. 12 „Design by Contract“:
       http://www.metafinanz.de/fileadmin/Dokumente/Kontakt/2007_08_hsr_eclipse.pdf




                                                                                                  Demo




©                                        Bessere Software durch AOP mit Java und AspectJ      26.11.2007 - Seite 21
JavaBeans Bound Properties



    PropertyChanges kommunizieren
     JavaBeans definieren PropertyChangeListener:
       „A PropertyChange event gets fired whenever a bean changes a bound property. You can register a
       PropertyChangeListener with a source bean so as to be notified of any bound property updates.“


     Implementierung sehr mühsam, da viel „Glue Code“ zu schreiben:
       Listener registrieren und deregistrieren.
       Für jede Bound Property muss ein PropertChangeEvent gefeuert werden.                              Demo
       Trotz Hilfsklasse PropertyChangeSupport viel „Handarbeit“ erforderlich.




©                                         Bessere Software durch AOP mit Java und AspectJ            26.11.2007 - Seite 22
JavaBeans Bound Properties



    Active Beans (www.aspectbrains.org/activebeans)
     Einfachere Lösung:
       Annotations markieren Klassen, deren Properties gebunden werden sollen.
                                                                                                Demo
       Aspekte fügen mittels Static und Dynamic Cross-cutting den Glue Code ein.




©                                         Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 23
Gliederung


                 I.     Einleitung


                 II.    Was ist AOP?
                            Motivation
                            Konzepte und Begriffe


                 III.   Überblick über AspectJ
                            „Hello World“
                            Sprachumfang im Überblick
                            Tools


                 IV.    AspectJ in der Praxis
                            Performance-Logging
                            Design by Contract
                            JavaBeans Bound Properties


                 V.     Optional: AspectJ Load Time Weaving und Eclipse Plug-ins


                 VI.    Fazit und Diskussion


©                                            Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 24
Fazit



    AOP bzw. AspectJ ist sehr nützlich
     AOP ermöglicht volle Seperation of Concerns und führt dadurch zu besserer Software.
     AspectJ ist eine reife und sehr mächtige AOP-Sprache für Java.
     Vorschlag für schrittweise Einführung:
       Eigene Compiler-Meldungen verwenden.
       Fertige Aspekte bzw. Aspekt-Libraries für Standard-Szenarien einsetzen.
       Eigene Aspekte für individuelle Cross-cutting Concerns erstellen.


    => Nutzen Sie AspectJ!


     Fragen und Antworten …




©                                          Bessere Software durch AOP mit Java und AspectJ   26.11.2007 - Seite 25
Herzlichen Dank!
                                                                       metafinanz
                                                                 Informationssysteme GmbH
                                                                        Leopoldstr. 146
                                                                       80804 München
                                                                   phone: +49 89 360531-0
                                                                    fax: +49 89 360531-15
                                                                   kontakt@metafinanz.de
                                                                      www.metafinanz.de




©              Bessere Software durch AOP mit Java und AspectJ                26.11.2007 - Seite 26

Weitere ähnliche Inhalte

Andere mochten auch

Lesscode WebMontag Mannheim September 2010
Lesscode WebMontag Mannheim September 2010Lesscode WebMontag Mannheim September 2010
Lesscode WebMontag Mannheim September 2010Heiko Seebach
 
trabajo de español
trabajo de españoltrabajo de español
trabajo de españolNaren-rivera
 
Cifras ambientales 2010
Cifras ambientales 2010Cifras ambientales 2010
Cifras ambientales 2010FertilMundo
 
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...Christian Katzenbach
 
Francisca y la muerte
Francisca y la muerteFrancisca y la muerte
Francisca y la muertejohanaosorio
 
Hta Online Grade EinfüHrg Final
Hta Online Grade EinfüHrg FinalHta Online Grade EinfüHrg Final
Hta Online Grade EinfüHrg Finalchoffmann
 
Convenio lo prado ONG CIPDEL
Convenio lo prado ONG CIPDELConvenio lo prado ONG CIPDEL
Convenio lo prado ONG CIPDELCIPDEL
 
Chicaque aleh
Chicaque alehChicaque aleh
Chicaque alehtauritho
 
I Convención de Agronegocios - UPC
I Convención de Agronegocios - UPCI Convención de Agronegocios - UPC
I Convención de Agronegocios - UPCFertilMundo
 
Evaluación de inteligencias múltiples
Evaluación de inteligencias múltiplesEvaluación de inteligencias múltiples
Evaluación de inteligencias múltiplesRobertoruedaalvarado
 

Andere mochten auch (20)

Lesscode WebMontag Mannheim September 2010
Lesscode WebMontag Mannheim September 2010Lesscode WebMontag Mannheim September 2010
Lesscode WebMontag Mannheim September 2010
 
trabajo de español
trabajo de españoltrabajo de español
trabajo de español
 
Cifras ambientales 2010
Cifras ambientales 2010Cifras ambientales 2010
Cifras ambientales 2010
 
Marcadores
MarcadoresMarcadores
Marcadores
 
MENSAJE
MENSAJEMENSAJE
MENSAJE
 
Práctica 18
Práctica 18Práctica 18
Práctica 18
 
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
Vortrag "Governance durch Algorithmen? 'Politics of Platforms' und die Ordnun...
 
Francisca y la muerte
Francisca y la muerteFrancisca y la muerte
Francisca y la muerte
 
Hta Online Grade EinfüHrg Final
Hta Online Grade EinfüHrg FinalHta Online Grade EinfüHrg Final
Hta Online Grade EinfüHrg Final
 
Convenio lo prado ONG CIPDEL
Convenio lo prado ONG CIPDELConvenio lo prado ONG CIPDEL
Convenio lo prado ONG CIPDEL
 
ePartizipation in Jugendverbänden
ePartizipation in JugendverbändenePartizipation in Jugendverbänden
ePartizipation in Jugendverbänden
 
September 9, 2011
September 9, 2011September 9, 2011
September 9, 2011
 
Chicaque aleh
Chicaque alehChicaque aleh
Chicaque aleh
 
Juleica-Statistik 2010 für Niedersachsen
Juleica-Statistik 2010 für NiedersachsenJuleica-Statistik 2010 für Niedersachsen
Juleica-Statistik 2010 für Niedersachsen
 
Ernesto
ErnestoErnesto
Ernesto
 
I Convención de Agronegocios - UPC
I Convención de Agronegocios - UPCI Convención de Agronegocios - UPC
I Convención de Agronegocios - UPC
 
PRM-Contratos
PRM-ContratosPRM-Contratos
PRM-Contratos
 
Vielfalt gehört in die Mitte!
Vielfalt gehört in die Mitte!Vielfalt gehört in die Mitte!
Vielfalt gehört in die Mitte!
 
Evaluación de inteligencias múltiples
Evaluación de inteligencias múltiplesEvaluación de inteligencias múltiples
Evaluación de inteligencias múltiples
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 

Ähnlich wie JUGM 07 - AspectJ

Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterHeiko Seeberger
 
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiHeiko Seeberger
 
Jm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashornJm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashornWolfgang Weigend
 
Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingHeiko Seeberger
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederChristoph Pickl
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEEguestc44b7b
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...Lukas Eder
 
JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEhwilming
 
Jax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentationJax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentationcamunda services GmbH
 
Infinispan - NoSQL für den Enterprise Java Alltag
Infinispan - NoSQL für den Enterprise Java AlltagInfinispan - NoSQL für den Enterprise Java Alltag
Infinispan - NoSQL für den Enterprise Java Alltaggedoplan
 
Neue Features der Java EE 6
Neue Features der Java EE 6Neue Features der Java EE 6
Neue Features der Java EE 6GFU Cyrus AG
 
JEE und Micro – kein Widerspruch!
JEE und Micro – kein Widerspruch!JEE und Micro – kein Widerspruch!
JEE und Micro – kein Widerspruch!gedoplan
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development ToolsCadaxo GmbH
 
JBoss AS / EAP Clustering
JBoss AS / EAP  ClusteringJBoss AS / EAP  Clustering
JBoss AS / EAP Clusteringhwilming
 

Ähnlich wie JUGM 07 - AspectJ (20)

Eclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matterEclipse Magazin 12 - Security does matter
Eclipse Magazin 12 - Security does matter
 
Eclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der DreiEclipse Magazin 16 - Die Stärke der Drei
Eclipse Magazin 16 - Die Stärke der Drei
 
Jm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashornJm 10.13 weigend_lagergren_nashorn
Jm 10.13 weigend_lagergren_nashorn
 
Eclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance LoggingEclipse Magazin15 - Performance Logging
Eclipse Magazin15 - Performance Logging
 
2011 09-09 activiti
2011 09-09 activiti2011 09-09 activiti
2011 09-09 activiti
 
JSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael GreifenederJSUG - OSGi by Michael Greifeneder
JSUG - OSGi by Michael Greifeneder
 
Introduction to JEE
Introduction to JEEIntroduction to JEE
Introduction to JEE
 
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
iJUG Java Aktuell [Februar 2015] Lukas Eder - jOOQ - ein alternativer Weg mit...
 
Spring 2.0
Spring 2.0Spring 2.0
Spring 2.0
 
JPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SEJPA – Der Persistenz-­Standard in der Java EE und SE
JPA – Der Persistenz-­Standard in der Java EE und SE
 
DOAG 2010: ADF Faces RC Best Practice
DOAG 2010: ADF Faces RC Best PracticeDOAG 2010: ADF Faces RC Best Practice
DOAG 2010: ADF Faces RC Best Practice
 
Jax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentationJax 2012-activiti-und-camel-presentation
Jax 2012-activiti-und-camel-presentation
 
Infinispan - NoSQL für den Enterprise Java Alltag
Infinispan - NoSQL für den Enterprise Java AlltagInfinispan - NoSQL für den Enterprise Java Alltag
Infinispan - NoSQL für den Enterprise Java Alltag
 
20110119 activiti jughh
20110119 activiti jughh20110119 activiti jughh
20110119 activiti jughh
 
Design OOA OOD
Design OOA OODDesign OOA OOD
Design OOA OOD
 
Neue Features der Java EE 6
Neue Features der Java EE 6Neue Features der Java EE 6
Neue Features der Java EE 6
 
JEE und Micro – kein Widerspruch!
JEE und Micro – kein Widerspruch!JEE und Micro – kein Widerspruch!
JEE und Micro – kein Widerspruch!
 
Webinar - ABAP Development Tools
Webinar - ABAP Development ToolsWebinar - ABAP Development Tools
Webinar - ABAP Development Tools
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
JBoss AS / EAP Clustering
JBoss AS / EAP  ClusteringJBoss AS / EAP  Clustering
JBoss AS / EAP Clustering
 

Mehr von Heiko Seeberger

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazHeiko Seeberger
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?Heiko Seeberger
 
Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Heiko Seeberger
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewHeiko Seeberger
 
OSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaOSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaHeiko Seeberger
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsHeiko Seeberger
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractHeiko Seeberger
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxHeiko Seeberger
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPHeiko Seeberger
 
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesW-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesHeiko Seeberger
 
JAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world ProjectJAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world ProjectHeiko Seeberger
 

Mehr von Heiko Seeberger (20)

Scaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of ScalazScaladays 2011 - The Ease of Scalaz
Scaladays 2011 - The Ease of Scalaz
 
Java Magazin - Lift
Java Magazin - LiftJava Magazin - Lift
Java Magazin - Lift
 
JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3JavaSPEKTRUM - Scala 3
JavaSPEKTRUM - Scala 3
 
JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2JavaSPEKTRUM - Scala 2
JavaSPEKTRUM - Scala 2
 
JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1JavaSPEKTRUM - Scala 1
JavaSPEKTRUM - Scala 1
 
RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?RheinJUG 2010 - Sprechen Sie Scala?
RheinJUG 2010 - Sprechen Sie Scala?
 
Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?Objektforum 2010 - Sprechen Sie Scala?
Objektforum 2010 - Sprechen Sie Scala?
 
W-JAX 09 - ScalaModules
W-JAX 09 - ScalaModulesW-JAX 09 - ScalaModules
W-JAX 09 - ScalaModules
 
W-JAX 09 - Lift
W-JAX 09 - LiftW-JAX 09 - Lift
W-JAX 09 - Lift
 
JM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala ReviewJM 08/09 - Beginning Scala Review
JM 08/09 - Beginning Scala Review
 
JM 08/09 - ScalaModules
JM 08/09 - ScalaModulesJM 08/09 - ScalaModules
JM 08/09 - ScalaModules
 
OSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on ScalaOSGi DevCon Europe 09 - OSGi on Scala
OSGi DevCon Europe 09 - OSGi on Scala
 
JAX 09 - OSGi on Scala
JAX 09 - OSGi on ScalaJAX 09 - OSGi on Scala
JAX 09 - OSGi on Scala
 
JAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components ModelsJAX 09 - OSGi Service Components Models
JAX 09 - OSGi Service Components Models
 
JAX 08 - Agile RCP
JAX 08 - Agile RCPJAX 08 - Agile RCP
JAX 08 - Agile RCP
 
Eclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by ContractEclipse Magazin 12 - Design by Contract
Eclipse Magazin 12 - Design by Contract
 
Eclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on EquinoxEclipse Magazin 14 - Getting hooked on Equinox
Eclipse Magazin 14 - Getting hooked on Equinox
 
EclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCPEclipseCon 08 - Agile RCP
EclipseCon 08 - Agile RCP
 
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic ModulesW-JAX 08 - Declarative Services versus Spring Dynamic Modules
W-JAX 08 - Declarative Services versus Spring Dynamic Modules
 
JAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world ProjectJAX 08 - Experiences using Equinox Aspects in a real-world Project
JAX 08 - Experiences using Equinox Aspects in a real-world Project
 

JUGM 07 - AspectJ

  • 1. Bessere Software durch aspektorientierte Programmierung mit Java und AspectJ Stand: 26.11.2007
  • 2. Gliederung I. Einleitung II. Was ist AOP? Motivation Konzepte und Begriffe III. Überblick über AspectJ „Hello World“ Sprachumfang im Überblick Tools IV. AspectJ in der Praxis Performance-Logging Design by Contract JavaBeans Bound Properties V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins VI. Fazit und Diskussion © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 2
  • 3. Einleitung Vorstellung Heiko Seeberger 36 Jahre Market Unit Manager of Enterprise Architecture bei metafinanz OO-Kenntnisse seit 1993, Java seit 1999 Schwerpunkte: AspectJ, Eclipse und SOA Aktiver Open Source Contributor © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 3
  • 4. Gliederung I. Einleitung II. Was ist AOP? Motivation Konzepte und Begriffe III. Überblick über AspectJ „Hello World“ Sprachumfang im Überblick Tools IV. AspectJ in der Praxis Performance-Logging Design by Contract JavaBeans Bound Properties V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins VI. Fazit und Diskussion © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 4
  • 5. Motivation Seperation of Concerns Herausforderung: Komplexität Ansatz: Problemstellung in überschaubare und disjunkte „Häppchen“ (Belange) zerlegen. Ergebnis: Verständliche Anforderungen Klare Konzepte Hochwertige Lösungen Höherer Grad an Wiederverwendung => Modularisierung ist gut! Objektorientierung (OO) fördert Modularisierung: Packages Klassen Methoden … © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 5
  • 6. Motivation Modularisierung broken OO vermag i.d.R. nicht, alle Belange zu modularisieren. Manche Belange durchsetzen die OO-Module: Cross-cutting Concerns. ClassA ClassB ClassC ConcernX ConcernX ConcernX Scattering: Belange sind auf mehrere Module verteilt. Tangling: Module enthalten mehrere Belange. => Die Software könnte noch besser (verständlicher, wartbarer , wiederverbendbarer etc.) sein. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 6
  • 7. AOP-Konzepte AOP modularisiert Cross-cutting Concerns AOP führt neben Klassen Aspekte ein. Cross-cutting Concerns werden von Klassen in Aspekte verlagert. ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX => Jedes Modul behandelt genau einen Belang => Vollständige Modularisierung. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 7
  • 8. AOP-Konzepte Weaving Herausforderung: Die separierten Belange wieder zusammenführen. Ansatz: Dieser Vorgang wird mit Weaving („Weben“) bezeichnet. ClassA ClassB ClassC AspectX ConcernX ConcernX ConcernX ConcernX Ergebnis: Die vormals separierten Belange „spielen wieder zusammen“. Mehrere Strategien: Precompiler. Compile-time Weaving: Beim/nach dem Compilieren (Java). Load-time Weaving: Beim Class Loading (Java). © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 8
  • 9. Gliederung I. Einleitung II. Was ist AOP? Motivation Konzepte und Begriffe III. Überblick über AspectJ „Hello World“ Sprachumfang im Überblick Tools IV. AspectJ in der Praxis Performance-Logging Design by Contract JavaBeans Bound Properties V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins VI. Fazit und Diskussion © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 9
  • 10. Sprachumfang im Überblick Hello World Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 10
  • 11. Sprachumfang im Überblick Anatomie von Aspekten 1 Dynamic cross-cutting 2 Static cross-cutting © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 11
  • 12. Dynamic cross-cutting Dynamische Aspekte von Aspekten Joinpoints sind Programmstellen, an denen Weaving ansetzen kann, z.B. Methoden-Aufrufe, Feldzugriffe, Instantiierung etc. Pointcuts definieren bestimmte Mengen von Joinpoints, z.B. „alle Methoden-Aufrufe“ oder „alle Methoden-Aufrufe der Klasse X mit einem Parameter“ oder … Advices enthalten die Belange und steuern unter Bezug auf Pointcuts das Weaving, z.B. „Vor PointcutX soll dieser Belang eingewoben werden“. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 12
  • 13. Static cross-cutting Klassen „aufbohren“ Hinzufügen von Feldern, Methoden und Konstruktoren. „Gewöhnliche“ Syntax mit vorangestelltem Klassennamen. Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 13
  • 14. Static cross-cutting Eltern adoptieren Typen erweitern, d.h. neue extends hinzufügen. Interfaces implementieren, d.h. neue implements hinzufügen. Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 14
  • 15. Static cross-cutting Default-Implementierungen für Interfaces Hinzufügen von Feldern und Methoden-Implementierungen zu Interfaces! Demo Macht gemixte Methoden direkt zugreifbar. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 15
  • 16. Static cross-cutting Eigene Compiler-Meldungen Anhand von statischen Pointcuts gibt der AspectJ-Compiler Fehler oder Warnungen aus. Nützlich für die Qualitätssicherung: Nutzung von unerwünschtem Code verhindern. Einhalten von Richtlinien sicherstellen. Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 16
  • 17. Gliederung I. Einleitung II. Was ist AOP? Motivation Konzepte und Begriffe III. Überblick über AspectJ „Hello World“ Sprachumfang im Überblick Tools IV. AspectJ in der Praxis Performance-Logging Design by Contract JavaBeans Bound Properties V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins VI. Fazit und Diskussion © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 17
  • 18. Performance-Logging Ein Praxisbeispiel Reporting von Performance-Kennzahlen aus dem laufenden Betrieb. Messung der Ausführungsdauer von Anwendungsfällen. Kommt im Kernsystem der Allianz Versicherung zum Einsatz. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 18
  • 19. Design by Contract Verbindliche Schnittstellen Design by Contract: Klare Vorgaben, was vom API erwartet und geliefert wird. Preconditions definieren die Erwartungshaltung. Postconditions beschreiben die Liefergarantien. Erfolgsfaktoren: Contracts müssen klar kommuniziert werden => Nutzer des API wissen Bescheid. Contracts dürfen nicht gebrochen werden können => Herausgeber des API kann sich verlassen. Die Umsetzung muss einfach sein. „Zweitbeste“ Lösung: Contracts in JavaDoc beschreiben. => Vollständig? Refactoring? Demo Contracts in den Implementierungen umsetzen, d.h. durch den Nutzer. => Verlässlichkeit? Mühsame Ansatz, oft redundanter Code. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 19
  • 20. Design by Contract ContractJ (www.aspectbrains.org/contractj) Bessere Lösung: Annotations markieren Contracts. Aspekte implementieren Contracts. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 20
  • 21. Design by Contract ContractJ Annotations sind ausdrucksstark. => Klare Kommunikation der Contracts. Annotations identifizieren und beschreiben Contracts gleichzeitig. => Vollständig und konsistent. Aspekte liegen in der Hoheit des API-Herausgebers. => Hohes Maß an Verlässlichkeit. Weiterführende Informationen siehe Eclipse Magazin Vol. 12 „Design by Contract“: http://www.metafinanz.de/fileadmin/Dokumente/Kontakt/2007_08_hsr_eclipse.pdf Demo © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 21
  • 22. JavaBeans Bound Properties PropertyChanges kommunizieren JavaBeans definieren PropertyChangeListener: „A PropertyChange event gets fired whenever a bean changes a bound property. You can register a PropertyChangeListener with a source bean so as to be notified of any bound property updates.“ Implementierung sehr mühsam, da viel „Glue Code“ zu schreiben: Listener registrieren und deregistrieren. Für jede Bound Property muss ein PropertChangeEvent gefeuert werden. Demo Trotz Hilfsklasse PropertyChangeSupport viel „Handarbeit“ erforderlich. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 22
  • 23. JavaBeans Bound Properties Active Beans (www.aspectbrains.org/activebeans) Einfachere Lösung: Annotations markieren Klassen, deren Properties gebunden werden sollen. Demo Aspekte fügen mittels Static und Dynamic Cross-cutting den Glue Code ein. © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 23
  • 24. Gliederung I. Einleitung II. Was ist AOP? Motivation Konzepte und Begriffe III. Überblick über AspectJ „Hello World“ Sprachumfang im Überblick Tools IV. AspectJ in der Praxis Performance-Logging Design by Contract JavaBeans Bound Properties V. Optional: AspectJ Load Time Weaving und Eclipse Plug-ins VI. Fazit und Diskussion © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 24
  • 25. Fazit AOP bzw. AspectJ ist sehr nützlich AOP ermöglicht volle Seperation of Concerns und führt dadurch zu besserer Software. AspectJ ist eine reife und sehr mächtige AOP-Sprache für Java. Vorschlag für schrittweise Einführung: Eigene Compiler-Meldungen verwenden. Fertige Aspekte bzw. Aspekt-Libraries für Standard-Szenarien einsetzen. Eigene Aspekte für individuelle Cross-cutting Concerns erstellen. => Nutzen Sie AspectJ! Fragen und Antworten … © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 25
  • 26. Herzlichen Dank! metafinanz Informationssysteme GmbH Leopoldstr. 146 80804 München phone: +49 89 360531-0 fax: +49 89 360531-15 kontakt@metafinanz.de www.metafinanz.de © Bessere Software durch AOP mit Java und AspectJ 26.11.2007 - Seite 26