AspectJ - AspectJ

AspectJ
Парадигма аспектно-ориентированный
Разработчик Фонд Затмения
Впервые появился 2001 г.  ( 2001 )
Стабильный выпуск
1.9.6 / 22 июля 2020 г . ; 8 месяцев назад  ( 2020-07-22 )
Язык реализации Ява
Операционные системы Кроссплатформенность
Лицензия Общественная лицензия Eclipse
Расширения имени файла эй
Веб-сайт www .eclipse .org / aspectj /
Основные реализации
Инструменты разработки AspectJ для Eclipse

AspectJ - это расширение аспектно-ориентированного программирования (АОП), созданное в PARC для языка программирования Java . Он доступен в проектах с открытым исходным кодом Eclipse Foundation , как автономных, так и интегрированных в Eclipse . AspectJ стал широко используемым де-факто стандартом для АОП, делая упор на простоту и удобство использования для конечных пользователей. Он использует синтаксис, подобный Java, и включает интеграцию IDE для отображения сквозной структуры с момента его первоначального публичного выпуска в 2001 году.

Описание на простом языке

Все допустимые программы Java также являются допустимыми программами AspectJ, но AspectJ позволяет программистам определять специальные конструкции, называемые аспектами . Аспекты могут содержать несколько сущностей, недоступных стандартным классам. Это:

Методы расширения
Позвольте программисту добавлять методы, поля или интерфейсы к существующим классам из аспекта. В этом примере к классу добавляется метод acceptVisitor (см. Шаблон посетителя ) Point :
aspect VisitAspect {
  void Point.acceptVisitor(Visitor v) {
    v.visit(this);
  }
}
Pointcuts
Позвольте программисту указывать точки соединения (четко определенные моменты выполнения программы, такие как вызов метода, создание экземпляра объекта или доступ к переменной). Все точки соединения - это выражения ( количественные оценки ), которые определяют, совпадает ли данная точка соединения. Например, этот разрез по точке соответствует выполнению любого метода экземпляра в объекте типа Point , имя которого начинается с set :
pointcut set() : execution(* set*(..) ) && this(Point);
Советы
Позвольте программисту указать код для запуска в точке соединения, совпадающей с pointcut . Действия могут выполняться до , после или около указанной точки соединения . Здесь совет обновляет отображение каждый раз, когда что-то Point установлено, с использованием pointcut, объявленной выше:
after () : set() {
  Display.update();
}

AspectJ также поддерживает ограниченные формы статической проверки на основе pointcut и повторного использования аспектов (по наследованию). См. Руководство по программированию AspectJ для более подробного описания языка.

Совместимость и реализация AspectJ

AspectJ может быть реализован разными способами, включая переплетение исходного кода или переплетение байт-кода , а также непосредственно в виртуальной машине (ВМ) . Во всех случаях программа AspectJ становится действующей программой Java, работающей на виртуальной машине Java. Классы, на которые влияют аспекты, двоично совместимы с незатронутыми классами (чтобы оставаться совместимыми с классами, скомпилированными с незатронутыми оригиналами). Поддержка нескольких реализаций позволяет языку расти по мере изменения технологий, а совместимость с Java обеспечивает доступность платформы.

Ключом к его успеху стали инженерные и языковые решения, которые сделали язык пригодным для использования и программы. Исходная реализация Xerox AspectJ использовала переплетение исходного кода, что требовало доступа к исходному коду. Когда Xerox предоставила код для Eclipse, AspectJ был переопределен с использованием компилятора Eclipse Java и ткача байт-кода на основе BCEL , чтобы разработчики могли писать аспекты кода в двоичной (.class) форме. В то время язык AspectJ был ограничен поддержкой модели для каждого класса, необходимой для инкрементальной компиляции и ткачества во время загрузки. Это сделало интеграцию IDE столь же отзывчивой, как и их аналоги на Java, и позволило разработчикам развертывать аспекты без изменения процесса сборки. Это привело к более широкому распространению, поскольку AspectJ стал использоваться нетерпеливыми программистами Java и развертываниями корпоративного уровня. С тех пор команда Eclipse повысила производительность и корректность, обновила язык AspectJ для поддержки таких функций языка Java 5, как обобщения и аннотации , и интегрировала аспекты чистого java в стиле аннотаций из AspectWerkz .

Проект Eclipse поддерживает интерфейсы командной строки и Ant . В родственном проекте Eclipse постоянно улучшается поддержка Eclipse IDE для AspectJ (называемого AspectJ Development Tools ( AJDT ) ) и других поставщиков сквозной структуры. Поддержка IDE для emacs , NetBeans и JBuilder прекратилась, когда Xerox поместила их в открытый исходный код, но поддержка Oracle JDeveloper все же появилась. Поддержка IDE была ключом к Java-программистам, использующим AspectJ и понимающим общие проблемы.

BEA предложила ограниченную поддержку виртуальных машин для аспектно-ориентированных расширений, но для расширений, поддерживаемых во всех виртуальных машинах Java, потребуется согласование в рамках процесса сообщества Java от Sun (см. Также пакет java.lang.instrument, доступный с Java SE 5, который является общей основой для Инструментарий времени загрузки JVM).

Академический интерес к семантике и реализации аспектно-ориентированных языков окружает AspectJ с момента его выпуска. Ведущей исследовательской реализацией AspectJ является компилятор AspectBench или abc ; он поддерживает расширения для изменения синтаксиса и семантики языка и формирует основу для многих экспериментов АОП, которые команда AspectJ больше не может поддерживать, учитывая широкую базу пользователей.

Многие программисты открывают для себя AspectJ как технологию, позволяющую реализовать другие проекты, в первую очередь Spring AOP . Родственный проект Spring, Spring Roo , автоматически поддерживает межтиповые объявления AspectJ в качестве основного вывода генерации кода.

История и участники

Грегор Кичалес основал и возглавил команду Xerox PARC, которая в конечном итоге разработала AspectJ. Он ввел термин « поперечная резка» . Четвертым в команде Крис Маеда ввел термин « аспектно-ориентированное программирование». Джим Хьюгунин и Эрик Хилсдейл ( члены команды Xerox PARC 12 и 13) были разработчиками оригинального компилятора и ткача, Мик Керстен реализовал интеграцию IDE и начал проект Eclipse AJDT с Адрианом Колером (нынешний руководитель проекта AspectJ ) и Эндрю Клементом (нынешний инженер-компилятор).

AspectBench компилятор был разработан и поддерживается в качестве совместных усилий по программированию Инструменты группы в вычислительной лаборатории Оксфордского университета , в исследовательской группы соболя в Университете Макгилла и Института фундаментальных исследований в области компьютерных наук (БРИКС) .

AspectWerkz

AspectWerkz - это динамический, легкий и высокопроизводительный фреймворк AOP / AOSD для Java . Он был объединен с проектом AspectJ, который поддерживает функциональность AspectWerkz начиная с AspectJ 5.

Йонас Бонер и Алекс Вассер разработали проект AspectWerkz, а затем внесли свой вклад в проект AspectJ, когда он объединил стиль аннотаций AspectWerkz и поддержку ткачества во время загрузки.

В отличие от AspectJ до версии 5, AspectWerkz не добавлял никаких новых языковых конструкций в Java, а вместо этого поддерживал объявление аспектов в аннотациях Java . Он использует модификацию байткода для плетения классов в проекте сборки времени, времени загрузки класса, а также время выполнения . Он использует стандартизированные API уровня JVM . Аспекты могут быть определены с помощью аннотаций Java (представленных в Java 5), ​​пользовательского доклета Java 1.3 / 1.4 или простого файла определения XML.

AspectWerkz предоставляет API для использования тех же аспектов для прокси-серверов, что обеспечивает прозрачность и плавность перехода для пользователей, знакомых с прокси-серверами.

AspectWerkz - бесплатное программное обеспечение . LGPL -стиль лицензия позволяет использовать AspectWerkz 2.0 в обоих проектах коммерческих и с открытым исходным кодом.

Смотрите также

использованная литература

  • Ладдад, Рамнивас (28 сентября 2009 г.), AspectJ в действии: Enterprise AOP с Spring (2-е изд.), Manning Publications , стр. 550, ISBN   978-1-933988-05-4
  • Майлз, Расс (20 декабря 2004 г.), Поваренная книга AspectJ (1-е изд.), O'Reilly Media , стр. 354, ISBN   978-0-596-00654-9
  • Колайер, Адриан; Клемент, Энди; Харли, Джордж; Вебстер, Мэтью (24 декабря 2004 г.), Eclipse AspectJ: Aspect-Oriented Programming with AspectJ и Eclipse AspectJ Development Tools (1-е изд.), Addison-Wesley Professional , p. 504, ISBN   978-0-321-24587-8
  • Gradecki, Joseph D .; Лесецки, Николас (7 марта 2003 г.), Освоение AspectJ: Аспектно-ориентированное программирование на Java (1-е изд.), Wiley , стр.  456 , ISBN   978-0-471-43104-6

внешние ссылки

  1. ^ «Загрузки AspectJ - Фонд Затмения» . eclipse.org . Проверено 5 апреля 2021 .