AspectJ - AspectJ
Парадигма | аспектно-ориентированный |
---|---|
Разработчик | Фонд Затмения |
Впервые появился | 2001 г. |
Стабильный выпуск | 1.9.6 / 22 июля 2020 г .
|
Язык реализации | Ява |
Операционные системы | Кроссплатформенность |
Лицензия | Общественная лицензия Eclipse |
Расширения имени файла | эй |
Веб-сайт | www |
Основные реализации | |
Инструменты разработки 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 в обоих проектах коммерческих и с открытым исходным кодом.
Смотрите также
- Аспектно-ориентированное программирование
- Spring AOP (часть Spring Framework )
- Аспектно-ориентированная разработка программного обеспечения
использованная литература
- Ладдад, Рамнивас (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
внешние ссылки
- AJDT
- Скамья Aspect: https://web.archive.org/web/20170816093700/http://www.sable.mcgill.ca/abc/
- Домашняя страница AspectJ
- Домашняя страница проекта AspectWerkz
- Повышение модульности с помощью аспектно-ориентированного программирования
- Введение в Spring AOP и AspectJ
- Руководство по программированию AspectJ
- Xerox имеет патент США 6 467 086 для AOP / AspectJ, но опубликовал исходный код AspectJ под Общей общественной лицензией , которая предоставляет некоторые патентные права.
- ^ «Загрузки AspectJ - Фонд Затмения» . eclipse.org . Проверено 5 апреля 2021 .