Just another Zexro tape

Блог levi

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.

Written by levi

2008, Апрель 6 в 20:42

Опубликовано в programming

Tagged with , ,

Ответить