Both styles ( .aj and @AspectJ ) have functions that others cannot do.
See this post for something that annotations can do that declarative AspectJ cannot: What is the declarative AspectJ syntax for rewriting an argument
.Aj files for the most part (other than those mentioned above) can do more. The most noteworthy they can do is ITD (Inter-Type-Definitions aka adding methods and properties to classes).
The biggest reason you would like to use @AspectJ is that even if you use WOP Spring proxy AOP support, it doesn't even require compilation of time (CTW) or even load time (LTW). Spring will mimic @AspectJ, but at runtime, creating a proxy.
I noticed that Spring, Eclipse (and I) seem to encourage greater use of true AspectJ. I believe this is because the Eclipse plugin has become so good. Also with true AspectJ and @Configurable annotation you can get Spring wiring to beans instance. Here's how Spring Roo works.
With the Eclipse AspectJ IDE plugin, you can see pointcut links for both styles (@ and aj) and get a very clear idea of ββwhat the βmagicβ is about.
source share