Встал и пошел
AspectJ для журналирования
Задача: покрутить AOP на как можно более простом примере.
Для этого возьмем:
1) Файл AspectTest.java с подопытным классом
package ajtest;
class AspectTest {
public void printKrivetko() {
System.out.println("Я криветко :)");
}
public void printMedved() {
System.out.println("Я медвед 8]");
}
public static void main(String[] args) {
AspectTest app = new AspectTest();
app.printKrivetko();
app.printMedved();
}
}
2) Файл PrintLogging.aj с простым аспектом
package ajtest;
// наш простой аспект
public aspect PrintLogging {
// наш простой адвайс
after() returning:
call(void AspectTest.print*()) {
System.out.println("^^^ вызыван какой-то метод print*");
}
}
3) Файл build.xml с несложным проектом
<project name="ajtest" default="ajx" basedir=".">
<!-- определяем директории для исходников и скомпилированных классов -->
<property name="src" location="src"/>
<property name="build" location="build"/>
<!-- определяем таск iajc -->
<taskdef
resource="org/aspectj/tools/ant/taskdefs/aspectjTaskdefs.properties">
<classpath>
<pathelement location="lib/aspectjtools.jar"/>
</classpath>
</taskdef>
<!-- цель для компиляции основных классов -->
<target name="compile">
<javac srcdir="${src}" destdir="${build}"/>
</target>
<!-- цель для добавления AOP-функциональности -->
<target name="ajx" depends="compile">
<iajc sourceroots="${src}"
destdir="${build}"
classpath="lib/aspectjrt.jar"
/>
</target>
</project>
4) Библиотеки aspectjrt.jar и aspectjtools.jar из последнего стабильного билда.
Все это разложим по директориям:
+ build + src |- + ajtest |- AspectTest.java |- PrintLogging.aj + lib |- aspectjrt.jar |- aspectjtools.jar build.xml
И соберем ant-ом:
ant
Запускаем (сообщения, создаваемые внутри аспекта, отправляются в стандартный вывод):
java -cp build;lib/aspectjrt.jar ajtest.AspectTest
В консоли должно появиться следующее:
Я криветко :)
^^^ вызыван какой-то метод print*
Я медвед 8]
^^^ вызыван какой-то метод print*
It’s working.

