AspectJ Syntax Basics
description
Transcript of AspectJ Syntax Basics
Com S 362: Object-Oriented Analysis and Design
AspectJ Syntax Basics
2 Com S 362: Object-Oriented Analysis and Design
2
Com S 362: Object-Oriented Analysis and Design
Identify Join Points
1 public class Bit {
2 bool value;
3 void Set() {
4 value = true;
5 }
6 void Clear() {
7 value = false;
8 }
9 void Toggle {
10 if(Get()) Set();
11 else clear();
12 }
13 void Get() {
14 return value;
15 }
16 }
3 Com S 362: Object-Oriented Analysis and Design
3
Com S 362: Object-Oriented Analysis and Design
Pointcuts Named
pointcut AllCall(): call( * *(..));
Anonymous
before(): call( * *(..)) { … }
4 Com S 362: Object-Oriented Analysis and Design
4
Com S 362: Object-Oriented Analysis and Design
Named Pointcut Syntax
[access specifier] pointcut pointcut-
name([args]): pointcut definition
5 Com S 362: Object-Oriented Analysis and Design
5
Com S 362: Object-Oriented Analysis and Design
Why Named Pointcuts? Pointcut Reuse
Separation of two specifications:
Where additional behavior is to be applied?
What is the additional behavior?
Late Binding of Design Decisions
6 Com S 362: Object-Oriented Analysis and Design
6
Com S 362: Object-Oriented Analysis and Design
Pointcut Reuse & Separationpublic pointcut StringArg(String s):
execution( * *(..)) && args(s);
around(String s): StringArg(s) { /* Omit execution if null argument */
}around(String s): StringArg(s) { /* Omit execution if not valid XML */
}
7 Com S 362: Object-Oriented Analysis and Design
7
Com S 362: Object-Oriented Analysis and Design
Late Bindingabstract aspect Lock { pointcut CriticalSections(); before(): CriticalSections() { /* Acquire lock */ } after(): CriticalSections() { /* Release lock */ } }
8 Com S 362: Object-Oriented Analysis and Design
8
Com S 362: Object-Oriented Analysis and Design
Late Binding …
aspect BufferLock extends Lock {
pointcut CriticalSections():
call(* * Buffer.Write(..));
}
9 Com S 362: Object-Oriented Analysis and Design
9
Com S 362: Object-Oriented Analysis and Design
Poincut composition pointcut1 && pointcut2
pointcut1 || pointcut2
! pointcut
10 Com S 362: Object-Oriented Analysis and Design
10
Com S 362: Object-Oriented Analysis and Design
Signatures Type Signatures
Method Signatures
Field Signatures
11 Com S 362: Object-Oriented Analysis and Design
11
Com S 362: Object-Oriented Analysis and Design
Example Type Signature
javax..*Model+
Any number of characters including period
Any number of characters excluding the period
Any sub-type of a given type
12 Com S 362: Object-Oriented Analysis and Design
12
Com S 362: Object-Oriented Analysis and Design
Exercise 1 Write down the type signature to pick out only
the sub-types of all the types in the javax package or its direct and indirect subpackages that have a name ending in Model.
13 Com S 362: Object-Oriented Analysis and Design
13
Com S 362: Object-Oriented Analysis and Design
Example Method Signature
* javax..*.add*Listener(EventListener+)
14 Com S 362: Object-Oriented Analysis and Design
14
Com S 362: Object-Oriented Analysis and Design
Example Field Signature
!public static * banking..*.*
15 Com S 362: Object-Oriented Analysis and Design
15
Com S 362: Object-Oriented Analysis and Design
Cflow and Cflowbelow Cflow (Pointcut) - Captures all join points in
the control flow of the join points matched by the specified pointcut, including the join points themselves.
Cflowbelow(Pointcut) – Excludes the matching join points, matches everything below.
16 Com S 362: Object-Oriented Analysis and Design
16
Com S 362: Object-Oriented Analysis and Design
cflow( execution Account.debit(..)) 1 void debit(int amount) {
2 if( this.getBalance() > amount) {
3 this.setBalance( this.getBalance() – amount);
4 }
5 int getBalance() {
6 return db.Query(name, “balance”);
7 }
8 int setBalance(int balance) {
9 db.Update(name, “balance”, balance);
10 }
17 Com S 362: Object-Oriented Analysis and Design
17
Com S 362: Object-Oriented Analysis and Design
Lexical Pointcuts within( type pattern )
withincode( method or constructor pattern)
18 Com S 362: Object-Oriented Analysis and Design
18
Com S 362: Object-Oriented Analysis and Design
Identify matches within(Bit)
1 public class Bit {
2 bool value;
3 void Set() {
4 value = true;
5 }
6 void Clear() {
7 value = false;
8 }
9 void Toggle {
10 if(Get()) Set();
11 else clear();
12 }
13 void Get() {
14 return value;
15 }
16 }
19 Com S 362: Object-Oriented Analysis and Design
19
Com S 362: Object-Oriented Analysis and Design
withincode(* * Bit.*et(..))
1 public class Bit {
2 bool value;
3 void Set() {
4 value = true;
5 }
6 void Clear() {
7 value = false;
8 }
9 void Toggle {
10 if(Get()) Set();
11 else clear();
12 }
13 bool Get() {
14 return value;
15 }
16 }