Presentation is loading. Please wait.

Presentation is loading. Please wait.

An Overview of AspectJ Sabine Hauert. Today's Deserts  Whipped introduction served with its three berries syrup  Chocolate history soufflé  Design.

Similar presentations


Presentation on theme: "An Overview of AspectJ Sabine Hauert. Today's Deserts  Whipped introduction served with its three berries syrup  Chocolate history soufflé  Design."— Presentation transcript:

1 An Overview of AspectJ Sabine Hauert

2 Today's Deserts  Whipped introduction served with its three berries syrup  Chocolate history soufflé  Design assumptions sunday with pecans  Language sorbet with a choice of the following flavors:  Join point madness  Too sophisticated point cuts  Advice for the mindless  Aspects with an attitude  Orange implementation fluffy mousse  Too good to dare conclusions

3 Introduction  What is AspectJ?  Aspect oriented programming (AOP) extension to Java

4 Introduction  What is AOP?  Separation of concerns  Modularity  No more tangled code  Simplicity  Maintainability  Reusability  Aspects  encapsulate behaviors that affect multiple classes (OO) into reusable modules.

5 Introduction  What is a crosscutting concern?  Behavior that cuts across the typical divisions of responsibility, such as logging or debugging  A problem which a program tries to solve.  Aspects of a program that do not relate to the core concerns directly, but which proper program execution nevertheless requires.

6 History  Developed at Xerox PARC (Palo Alto RC)  Launched in 1998  PARC transferred AspectJ to an openly- developed eclipse.org project in December of 2002. For more info: www.eclipse.org/aspectj

7 Design assumptions  Real Community Users  Writing aspects  Reading aspects  Idioms  How effective for concerns  Modular,reusable and easy to develop and maintain  Java compatibility  Upward compatibility  Platform compatibility  Tool compatibility  Programmer Compatibility

8 Language Dynamic VS Static crosscutting  Dynamic crosscutting  define additional behavior to run at certain well-defined points in the execution of the program  Static crosscutting  modify the static structure of a program (e.g., adding new methods, implementing new interfaces, modifying the class hierarchy)

9 Language Join Points  Well-defined points in the execution of a program:  Method call, Method execution  Constructor call, Constructor execution  Static initializer execution  Object pre-initialization, Object initialization  Field reference, Field set  Handler execution  Advice execution

10 Language Join Points public class Point { private int x; private int y; public Point(int x, int y) { this.x = x; this.y = y; } public void incrXY(int dx, int dy){ x=+dx; y=+dy; } … } public class Test{ public static void main(String[] args) { Point pt1 = new Point(0,0); pt1.incrXY(3,6); } Method-execution “Test.main(..)” Staticinitialization “Point._clinit_” Constructor-call “Point(..)” Preinitialization “Point(..)” Initialization “Point(..)” Constructor-execution “Point(..)” Field-set “Point.x” Field-set “Point.y” Method-call “Point.incrXY(..)” Method-execution “Point.incrXY(..)” Field-set “Point.y” Field-set “Point.x”

11 Language Pointcuts  A set of join point, plus, optionally, some of the values in the execution context of those join points.  Can be composed using boolean operators ||, &&  Matched at runtime

12 Language Example

13 Language Pointcut examples call(public void Point.setX(int)) Matches if the join point is a method call with this signature. call(public void FigureElement.incrXY(int,int)) Matches if the join point is a method call to any kind of figure element. call(public void Point.setX(int))|| call(public void Point.setY(int)) Matches any call to setX OR setY !this(FigureElement)&& call(public void FigureElement.incrXY(int,int)) Matches all method calls to incrXY that come from an object of another type, as well as calls from static methods

14 Language User-defined pointcut desigantors. Pointcut moves(): call(void FigureElement.incrXY(int,int))|| call(void Line.setP1(Point)) || call(void Line.setP2(Point)) || call(void Point.setX(int)) || call(void Point.setY(int)) moves()

15 Language Advice  Method-like mechanism used to declare that certain code should execute at each of the join points in the pointcut.  Advice:  before  around  after  after returning  after throwing

16 Language Advice execution order Different tries have brought me to the conclusion that advice ordering is not as described in the paper. …eclipse example(Live demo).

17 Language Pointcut parameters and thisJoinPoint Parameters  Exposes certain values that are in the execution context of the join points. before(Point p, int nval): call(void Point.setX(int))&& target(p)&& args(nval){ if(nval>MAXBOUND) System.out.println(“The value is too big !”); else System.out.println(“x value of “+p+” will be set to : “+nval); }

18 Language Pointcut parameters and thisJoinPoint thisJoinPoint  Simple reflective access to information about the current join point. Notice that this is very useful for debugging and tracing purposes. before(): call(void Point.setX(int)){ if(((Integer)thisJoinPoint.getArgs()[0]).intValue()>10) System.out.println("The value is too big !"); else System.out.println("x value of ” +thisJoinPoint.getTarget() +" will be set to” +thisJoinPoint.getArgs()[0]); }

19 Language Wildcards and cflow  Wildcards  call( * Point. *(..))  call( public * com.xerox.scanner.*.*(..))  call( * Point.get*())

20 Language Wildcards and cflow  Control-flow  pointcut moveContext(): cflow(move())  picks out each join point that occurs in the dynamic context of the join points picked out by move().

21 Language Wildcards and cflow  Control-flow below pointcut moves(FigureElement fe): target(fe)&& …); pointcut topLevelMoves(FigureElement fe): target(fe)&& moves(FigureElement)&& !cflowbelow(moves(FigureElement)); before(FigureElement fe): target(fe)&& topLevelMoves(FigureElement) { System.out.println("top level moves"); }

22 Language Inheritance and Overriding of Advice and pointcuts  Abstract aspect & Abstract pointcuts abstract aspect SimpleTracing{ abstract pointcut tracePoints(); before(): tracePoints() { printMessage(“Entering”,thisJoinPoint); } after(): tracePoints(){ printMessage(“Exiting”,thisJoinPoint); } void printMessage(Stringwhen,JoinPoint jpt){ code to print an informative message using information from the joinpoint } }

23 Language Inheritance and Overriding of Advice and pointcuts  Concrete implementation of the aspect: aspect IncrXYTracing extends SimpleTracing{ pointcut tracePoints(): call(void FigureElement.incrXY(int, int)); }

24 Language Aspects  Mix everything we’ve seen up to now and put it one or more modular units called Aspects.  Looks a lot like a class!  Can contain pointcuts, advice declarations, methods, variables ….  Single instances (default behavior)

25 Language Aspects aspectMoveTracking { static boolean flag=false; static boolean testAndClear(){ boolean result =flag; flag =false; return result; } pointcut moves(): receptions(void FigureElement.incrXY(int,int))|| receptions(void Line.setP1(Point)) || receptions(void Line.setP2(Point)) || receptions(void Point.setX(int)) || receptions(void Point.setY(int)); after(): moves() { Flag =true; }

26 Language Ordering Aspects In order to control precedence between aspects use something like: declare precedence : Mobility, MoveTracking, * ; Where at each join point, advice from Mobility has precedence over advice from MoveTracking, which has precedence over other advice.

27 Language Ordering Aspects Example: aspect Mobility{ declare precedence Mobility, MoveTracking; private static booleanenableMoves =true; static voidenableMoves() {enableMoves =true; } static voiddisableMoves(){enableMoves=false;} around() returns void:MoveTracking.moves(){ if(enableMoves ){ proceed(); }

28 Implementation  Aspect weaving: makes sure that applicable advice runs at the appropriate join points.  In AspectJ, almost all the weaving is done at compile-time to expose errors and avoid runtime overhead.  Cflow and this (maybe others) require dynamic dispatch.

29 Demos  If there is enough time I can show a few interesting and simple AspectJ programs I have. Just to show off the eclipse environment.

30 Conclusion  Three words  Modular  Concise  Explicit  Questions  How big a problem is encapsulation?  When to use an aspect and when to refractor the code?  Are aspect realistic for big systems?  How does this compare to what has been seen before?  Criticisms on the language design?


Download ppt "An Overview of AspectJ Sabine Hauert. Today's Deserts  Whipped introduction served with its three berries syrup  Chocolate history soufflé  Design."

Similar presentations


Ads by Google