java - Calling methods declared in an aspect -


this page shows how 1 can add methods existing classes , shows how declare methods inside aspect call additional methods.

this code page:

aspect pointobserving {     private vector point.observers = new vector();      public static void addobserver(point p, screen s) {         p.observers.add(s);     }     public static void removeobserver(point p, screen s) {         p.observers.remove(s);     }      pointcut changes(point p): target(p) && call(void point.set*(int));      after(point p): changes(p) {         iterator iter = p.observers.iterator();         while ( iter.hasnext() ) {             updateobserver(p, (screen)iter.next());         }     }      static void updateobserver(point p, screen s) {         s.display(p);     } } 

i trying reuse pattern in same setting (observer pattern) want able add observers anywhere in java code. thus, in example shown on page, want class in package:

point p = new point(120, 230); screen s = getscreen(); pointobserving.addobserver(p, s); 

however, "aspect" pointobserving not visible java classes (though have declared public).

i found way --apparently aspectj allows not define fields methods. so, need modify aspect below (note how have replaced static point.)

aspect pointobserving {     private vector point.observers = new vector();      public void point.addobserver(point p, screen s) {         observers.add(s); //legal access observers here     }     public void point.removeobserver(point p, screen s) {         observers.remove(s); //legal access observers here     }      //rest remains same before. } 

now somewhere in normal java class can this:

point p = new point(120, 230); screen s = getscreen(); p.addobserver(s); 

also, worthwhile declaring observers weak references. thus,

private collection<screen> point.observers = collections.newsetfrommap(new weakhashmap<screen, boolean>()); //rest remains same 

Comments

Popular posts from this blog

ios - iPhone/iPad different view orientations in different views , and apple approval process -

java Extracting Zip file -

C# WinForm - loading screen -