АспектJ


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

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

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

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

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

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