AspectJ - Rekursion vermeiden

Studdi23

Grünschnabel
Hallo zusammen,

arbeite mich zur Zeit in AspectJ ein und habe da ein Problem bei der Definition des Pointcuts. Folgendes Szenario:

Ich habe zwei Klassen A un B die von einer Klasse C ableiten und jeweils eine Membervariable der anderen Klasse besitzen, also quasi so was hier

Code:
package de.test;

public class A extends C
{

private B b;

...

}

public class B extends C
{

private A a;

...

}

Als nächstes habe ich einen Pointcut definiert der aufgerufen wird sobald der Konstruktor einer Klasse (also der von A und B) im Package "de.test" beendet ist. Mein Ziel ist es während der Instantiierung eines Objekts der Klasse, die Felder des Objekts mittels Reflection zu initialisieren.


Code:
package de.aspects;
@AfterReturning("this(c) && execution(public de.test.*.new(..))" + "&&  !within(de.aspects..*)")
public void setField(C c) throws Exception
{
  ...
  Class<?> clazz = Class.forName(objectToInitialize); 
  field.set(c, clazz.newInstance());
 ...
}

Wenn jetzt die Class.newInstance Methode für A aufgerufen und eine neue Objektinstanz für Feld B erzeugt wird, wird der Pointcut für B aufgerufen und Feld A wird initialisiert. Das ganze läuft dann in einer Endlosschleife und ich erhalte einen Stackoverflow. Ich hatte gedacht, dass ich mit dem !within Pointcut Aufrufe innerhalb des Packages indem sich der Aspekt befindet ausschließen kann, aber dass scheint hier aus irgendwelchen Gründen nicht zu funktionieren. Hat jemand eine Idee?

Gruß
Studdi
 

Neue Beiträge

Zurück