Использование аспектов в Java-приложении - когда javac / ajc? - PullRequest
1 голос
/ 17 сентября 2011

Я думаю об использовании AspectJ в существующем проекте.

У меня есть несколько проектов чистого Java Eclipse, и мне нравится создавать проект AOP.

Я не совсем уверен, когда нужен ajc и когда это необязательно. Мы используем Ant (с javac) в качестве основной сборки, и я хотел бы избежать изменения сборки.

Возможно ли следующее:

У меня есть Eclipse с поддержкой AspectJ и я создаю свой проект аспекта. Я создаю банку из этого и включаю эту банку с jar aspectj в обычное рабочее пространство затмения с другими проектами. Сборка включает в себя мой аспект jar и aspectj jar как jarac зависимостей с javac.

Этого достаточно для работы с аспектами? Или каждый проект приложения должен быть скомпилирован с помощью ajc?

Основная цель - сохранить текущую структуру среды установки и сборки Eclipse настолько, насколько это возможно.

Или это возможно только в стиле аннотации? (если так, может кто-нибудь связать мне некоторую информацию о ткаче и как сделать это во время выполнения?)

Спасибо

1 Ответ

1 голос
/ 21 сентября 2011

Если вы хотите встроить свой аспект в вашу кодовую базу, вы должны использовать AJC.Если вы используете только javac, даже с аннотацией, ваш код не будет сотворен вашими аспектами.

При этом вам не нужно много добавлять в сборку ant.

что-то подобное должно сделать эту работу:

<path id="ajclasspath">
    <path refid="classpath"/>
    <pathelement location="${scm.home}/ant_libs/aspectjrt.jar"/>
</path>
<iajc inpath="${classes.dir}" destDir="${classes.dir}" fork="true" maxmem="${aspectj.maxmem}">
    <argfiles refid="aspectj.argfiles.path"/>
    <classpath refid="ajclasspath"/>
</iajc>

На самом деле, вы просто строите как обычно, и вы добавляете шаг с iajc, принимающим выходной каталог компиляции javac в качестве входного, и вы помещаетерезультат в том же каталоге.

Вы также можете взять jar в качестве входных данных для iajc и создать jar со всеми своими вещами, сплетенными внутри.

Редактировать: Или вы можете использовать время выполнения, если вашПриложение - это веб-приложение, оно не так уж плохо.Если нет, я не рекомендую ткачество во время выполнения, так как каждый раз, когда вы запускаете свое приложение, оно может запускаться намного дольше.У меня нет большого опыта в ткачестве во время выполнения, но вы можете проверить это.Я знаю, что вам нужен aop.xml, чтобы определить ваши аспекты.

С уважением

...