AspectJ - зачем использовать аннотации вместо компилятора ajc? - PullRequest
4 голосов
/ 24 мая 2011

Мы можем использовать как стиль аннотации @AspectJ для определения аспектов, так и язык расширения AspectJ Java, который требует от нас использования компилятора ajc.

По каким причинам можно использоватьстиль аннотации вместо ajc?Мне кажется, что большая часть функциональности теряется при использовании стиля аннотации, но не так много (если вообще что-то) получается, кроме того, что не нужно использовать ajc (что такого плохого в использовании ajc?)

Может ли кто-нибудь просветить меня по этой теме?

Ответы [ 2 ]

4 голосов
/ 24 мая 2011

Оба стиля ( .aj и @ AspectJ ) имеют функции, которые другой не может сделать.

См. Этот пост о том, что аннотации могут сделать, что декларативный AspectJ не может: Что такое декларативный синтаксис AspectJ для перезаписи аргумента

Файлы .aj по большей части (кроме упомянутых выше) могут сделать намного больше. Наиболее примечательно, что они могут выполнять ITD (Inter-Type-Definitions, иначе говоря, добавление методов и свойств в классы).

Самая большая причина, по которой вы захотите использовать @AspectJ, заключается в том, что он даже не требует ткачества времени компиляции (CTW) или даже времени загрузки (LTW), если вы используете поддержку Spring прокси AOP. Spring будет имитировать @AspectJ, но во время выполнения, создавая прокси.

Я заметил, что Spring, Eclipse (и я), похоже, поощряют более широкое использование настоящего AspectJ. Я считаю, что это потому, что плагин Eclipse стал настолько хорошим. Также с истинным AspectJ и аннотацией @Configurable вы можете получить проводку Spring на экземплярах bean-компонентов. Вот как работает Spring Roo.

С помощью плагина Eclipse AspectJ IDE вы можете увидеть ссылки pointcut на оба стиля (@ и aj) и получить очень четкое представление о том, что происходит с «волшебством».

2 голосов
/ 24 мая 2011

Добавление какого-либо дополнительного шага в процесс сборки - не самый простой и хороший способ.Особенно, когда у вас большой проект.Вы отказываетесь от всех инструментов Java и поддержки IDE, которая может не поддерживать синтаксис * .aj.

...