Это не имеет никакого отношения к весне.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 и какие типы требуют статической компиляции.Я не знаю ни одного онлайн-ресурса, который бы даже приблизился.