takidoso
Erfahrenes Mitglied
Hallo und Halli,
ich habe mal angefangen mich ein wenig mit ApectJ auseinanderzusetzen.
Irgendwie habe ich noch nicht herausgefunden wie man auf statische Elemente zugreift, um sie in einem advice zu verwenden.
Mein anwendungsgeiebt wäre log4j, der einfach für bestimmte Klassen verwendet werden soll um start und beginn einer Routine zu loggen.
Die Beispiele die ich finde sind ausnahms los mit schnöden System.outs bestückt.
ich habe aber dann noch etwas gefunden, was ich als eine Art Workaround ansehe und was zwar funktioniert aber ein wenig unelegant mi rerscheint, da man dafür in der Laufzeit die AspectJ Bibliothek benötigt. Dieser Workaround sieht wie folgt aus:
So frage ich mich ob man nicht auch ohne die Reflektion auskommt und man stattdessen das typische Feld "logger" welche sin allen Klassen statisch vorliegt verwendet werden kann? Mir ist es da leider nicht gelungen bekam dann immer Compilerfehler.
Hat da jemand eine Idee oder ein Rezept, oder geht das so gar nicht, weil in AspectJ nicht vorgesehen?
Mit bestem Dank für Hinweise im Voraus
Takidoso
ich habe mal angefangen mich ein wenig mit ApectJ auseinanderzusetzen.
Irgendwie habe ich noch nicht herausgefunden wie man auf statische Elemente zugreift, um sie in einem advice zu verwenden.
Mein anwendungsgeiebt wäre log4j, der einfach für bestimmte Klassen verwendet werden soll um start und beginn einer Routine zu loggen.
Die Beispiele die ich finde sind ausnahms los mit schnöden System.outs bestückt.
ich habe aber dann noch etwas gefunden, was ich als eine Art Workaround ansehe und was zwar funktioniert aber ein wenig unelegant mi rerscheint, da man dafür in der Laufzeit die AspectJ Bibliothek benötigt. Dieser Workaround sieht wie folgt aus:
Java:
import org.apache.log4j.Logger;
import org.aspectj.lang.Signature;
import de.lala.Klasse1
import de.lala.Klasse2;
import de.lala.Klasse3;
public aspect Performance
{
pointcut classes() : within(Klasse1) || within (Klasse2) || within(Klasse3);
pointcut constructors() : classes() && execution(new(..));
pointcut methods() : classes() && execution (* *(..));
before () : constructors() || methods()
{
Signature sig = thisJoinPointStaticPart.getSignature();
Logger logger = Logger.getLogger(sig.getDeclaringType());
logger.info("----- start:"+sig);
}
after () : constructors() || methods()
{
Signature sig = thisJoinPointStaticPart.getSignature();
Logger logger = Logger.getLogger(sig.getDeclaringType());
logger.info("----- end:"+sig);
}
}
So frage ich mich ob man nicht auch ohne die Reflektion auskommt und man stattdessen das typische Feld "logger" welche sin allen Klassen statisch vorliegt verwendet werden kann? Mir ist es da leider nicht gelungen bekam dann immer Compilerfehler.
Hat da jemand eine Idee oder ein Rezept, oder geht das so gar nicht, weil in AspectJ nicht vorgesehen?
Mit bestem Dank für Hinweise im Voraus
Takidoso