Der Weg zum ersten Aspekt:
Versionen:
Eclipse: 3.0 (mit neueren Versionen als 3.0 hatte ich Probleme)
AJDT: 1.12 update site: http://download.eclipse.org/technology/ajdt/30/update
http://dev.eclipse.org/viewcvs/inde...c/org.eclipse.ajdt.ui/doc/AJDTug/ajdt-doc.htm
HelloWorld Klasse
Ausgabe des Programms:
Warum ? Wegen folgendem Aspect
Wie funktioniert das ?
AspectJ Programme werden nicht mit javac kompiliert, sondern mit einem von AspectJ bereitgestellten Compiler, der javac erweitert.
In unserem Aspect legen wir fest, das wir auf alle Aufrufe der Methode sayHello reagieren wollen. Hier kann man auch Wildcards verwenden, z.b. um alle setter einer Klasse abzugreifen, sehr nützlich. Dann haben wir die Wahl vor dem Event, nach dem Event, etc. zu reagieren. Der Event ist der Aufruf der Methode sayHello. In unserem Fall reagieren wir nach dem Event, deswegen after(), und wir reagieren mit "Hello to you too".
sexy, oder ?
Für was ist es gut ?
Erstens ist es gut, weil man so Code besser strukturieren kann. 1-to-1-idea: Einer Anforderung soll eine Implementierung gegenüberstehen. Tatsache ist aber das in vielen Anwendung LOGIK die ein und das selbe Problem betrifft über die ganze Anwendung verteilt ist. Mit Aspekten verhindert man das. Aus den vielen kleinen Codestücken, die in meiner Anwendung verteilt sind, entsteht ein Aspekt, der an einer Stelle das Problem abdeckt.
Ausserdem eignet es sich auch gut zur Analyse von Projekten, aber das sieht man am besten wenn man bisschen mit dem AJDT herumspielt.
Fragen ? gerne per mail, ich hab selber erst mit Aspects angefangen und finds sehr interessant.
Links
Eclipse: http://eclipse.org
AJDT: http://eclipse.org/ajdt/
Tutorial: http://dev.eclipse.org/viewcvs/inde...c/org.eclipse.ajdt.ui/doc/AJDTug/ajdt-doc.htm
oder http://www-106.ibm.com/developerworks/library/j-ajdt/
[edit by stevg] Hier noch ein kurzer Einblick in AspectJ und HyperJ: http://www.gm.fh-koeln.de/ehses/seminar/ergebnisse03/Aspektorientierte-Programmierung/
Versionen:
Eclipse: 3.0 (mit neueren Versionen als 3.0 hatte ich Probleme)
AJDT: 1.12 update site: http://download.eclipse.org/technology/ajdt/30/update
http://dev.eclipse.org/viewcvs/inde...c/org.eclipse.ajdt.ui/doc/AJDTug/ajdt-doc.htm
HelloWorld Klasse
Code:
public class HelloWorld {
public static void main(String[] args) {
sayHello();
}
public static void sayHello() {
System.out.println("Hello");
}
}
Ausgabe des Programms:
Hello
Hello to you too...
Warum ? Wegen folgendem Aspect
Code:
public aspect World {
pointcut greeting() : execution(* HelloWorld.sayHello(..));
after() : greeting() {
System.out.println("Hello to you too...");
}
}
Wie funktioniert das ?
AspectJ Programme werden nicht mit javac kompiliert, sondern mit einem von AspectJ bereitgestellten Compiler, der javac erweitert.
In unserem Aspect legen wir fest, das wir auf alle Aufrufe der Methode sayHello reagieren wollen. Hier kann man auch Wildcards verwenden, z.b. um alle setter einer Klasse abzugreifen, sehr nützlich. Dann haben wir die Wahl vor dem Event, nach dem Event, etc. zu reagieren. Der Event ist der Aufruf der Methode sayHello. In unserem Fall reagieren wir nach dem Event, deswegen after(), und wir reagieren mit "Hello to you too".
sexy, oder ?
Für was ist es gut ?
Erstens ist es gut, weil man so Code besser strukturieren kann. 1-to-1-idea: Einer Anforderung soll eine Implementierung gegenüberstehen. Tatsache ist aber das in vielen Anwendung LOGIK die ein und das selbe Problem betrifft über die ganze Anwendung verteilt ist. Mit Aspekten verhindert man das. Aus den vielen kleinen Codestücken, die in meiner Anwendung verteilt sind, entsteht ein Aspekt, der an einer Stelle das Problem abdeckt.
Ausserdem eignet es sich auch gut zur Analyse von Projekten, aber das sieht man am besten wenn man bisschen mit dem AJDT herumspielt.
Fragen ? gerne per mail, ich hab selber erst mit Aspects angefangen und finds sehr interessant.
Links
Eclipse: http://eclipse.org
AJDT: http://eclipse.org/ajdt/
Tutorial: http://dev.eclipse.org/viewcvs/inde...c/org.eclipse.ajdt.ui/doc/AJDTug/ajdt-doc.htm
oder http://www-106.ibm.com/developerworks/library/j-ajdt/
[edit by stevg] Hier noch ein kurzer Einblick in AspectJ und HyperJ: http://www.gm.fh-koeln.de/ehses/seminar/ergebnisse03/Aspektorientierte-Programmierung/