Аспектно-ориентированное программирование: различия между версиями

Содержимое удалено Содержимое добавлено
Строка 115:
Чтобы аспекты могли оказывать воздействие на обычный, основанный на классах код, эти аспекты должны быть «вплетены» в модифицируемый ими код. Чтобы осуществить это в AspectJ, надо [[:w:ru:Компилятор|откомпилировать]] код класса и аспекта ajc-компилятором. ajc может функционировать как полноценный компилятор, генерируя действующий код класса, так и как [[:w:ru:препроцессор|препроцессор]], генерируя .java файлы компилируемые стандартными средствами Java (со ссылкой на небольшой run-time JAR).
 
Для компиляции в AspectJ необходимо явно задать исходные файлы (и для аспектов, и для классов), подлежащие включению в данную компиляцию — ajc не использует classpath, в отличие от javac. Это имеет определенныйопределённый смысл, поскольку каждый класс стандартного приложения Java является, в некотором смысле, изолированным [[:w:ru:Компонент (программирование)|компонентом]]. Для корректной работы классу требуется всего лишь присутствие других классов, на которые он ссылается. Аспекты же представляют совокупное поведение, перекрывающее множество классов. Поэтому АОП-приложение должно компилироваться, как модуль, а не по одному классу за один раз.
 
Задавая файлы для компиляции, можно также включать и отключать различные аспекты системы на этапе компиляции. Например, включая или исключая описанный ранее аспект для регистрации, разработчик приложения может добавлять или удалять трассировку метода системы Cactus.
Существенное ограничение '''текущей версии''' AspectJ состоит в том, что еееё компилятор может вводить аспекты только в код, для которого есть исходный текст. Иными словами, невозможно использовать ajc для включения advice в уже откомпилированные классы. Разработчики AspectJ представляют это ограничение как временное, и на Web-сайте AspectJ можно найти подтверждение того, что в будущей версия (официально — версия 2.0) будут допустимы модификации на уровне [[:w:ru:Байт-код|байт-кода]].
 
=== Обзор возможностей AspectJ ===