весенний аспект мавена - PullRequest
1 голос
/ 24 января 2011

Можно ли использовать spring с aspectj для создания времени компиляции, а не записывать файл .aj aspectj

Если есть пример или руководство, которое было бы здорово.

Ответы [ 2 ]

4 голосов
/ 25 января 2011

Это не имеет никакого отношения к весне.AspectJ поддерживает как традиционный синтаксис (файлы .aj), так и так называемый @AspectJ - синтаксис (файлы .java с аннотациями).

Spring AOP поддерживает только последний, но компилятор AspectJ поддерживает оба варианта.

Пример:

Класс Java:

public class ServiceClass{

    public void foo(final String bar){
        System.out.println(bar);
    }

    public static void main(final String[] args){
        new ServiceClass().foo("Bar Baz Phleem");
    }

}

Традиционный (.aj) аспект:

public aspect TestTraditionalAspect{

    pointcut executeFoo(String bar) : execution(* foo.bar.ServiceClass.foo(**))
    && args(bar)
    ;

    void around(final String args) : executeFoo(args) {
        System.out.println("Traditional: Before foo: "+args);
        proceed(args);
        System.out.println("Traditional: After foo: "+args);
    }

}

@ AspectJ-style (.java) Aspect (почти эквивалентный)

@Aspect
public class TestAtAspectJAspect{

    @Pointcut(value = "execution(* foo.bar.ServiceClass.foo(**))"
                    + " && args(bar)")
    public void executeFoo(final String bar){
    }

    @Around("executeFoo(args)")
    public void aroundFooExecution(final String args,
        final ProceedingJoinPoint pjp) throws Throwable{
        System.out.println("@AspectJ: Before foo: " + args);
        pjp.proceed(new String[] { args });
        System.out.println("@AspectJ: After foo: " + args);

    }

}

Вывод:

Вот вывод, когда я запускаю ServiceClass.main () как приложение Java / AspectJ в Eclipse:

Традиционное: до foo: Bar Baz Phleem
@AspectJ: до foo: Bar Baz Phleem
bar
@AspectJ: После foo: Bar Baz Phleem
Традиционный: После foo: Bar Baz Phleem

Eclipse внутренне использует компилятор AspectJ, поэтому то же самое произойдет, если вы запустите компилятор AspectJ на исходникахиспользуя Maven.

Ссылка:

Читать AspectJ в действии Рамнивас Ладдад для болееИнформация.Он также содержит информацию о том, какие аспекты вы можете использовать в Spring AOP и какие типы требуют статической компиляции.Я не знаю ни одного онлайн-ресурса, который бы даже приблизился.

1 голос
/ 25 января 2011

Взгляните на springsource.org / roo / start . Новый продукт от Spring для быстрой разработки приложений. Вы запускаете консоль roo и вводите имена и атрибуты своих доменных объектов, а roo создает pojo, которые улучшаются с помощью классов aspectj во время компиляции. Ру также создает помпона мавена, и в конце вы получаете именно то, что просили. Я нашел roo perfekt для обучения, как использовать spring, aspectj, maven и многое другое.

...