AspectJ es una extensión de programación orientada a aspectos (AOP) creada en PARC para el lenguaje de programación Java . Está disponible en proyectos de código abierto de Eclipse Foundation , tanto independientes como integrados en Eclipse . AspectJ se ha convertido en un estándar de facto ampliamente utilizado para AOP al enfatizar la simplicidad y la facilidad de uso para los usuarios finales. Utiliza una sintaxis similar a Java e incluye integraciones IDE para mostrar la estructura transversal desde su lanzamiento público inicial en 2001.
Paradigma | orientado al aspecto |
---|---|
Desarrollador | Fundación Eclipse |
Apareció por primera vez | 2001 |
Lanzamiento estable | 1.9.6 / 22 de julio de 2020 [1] |
Lenguaje de implementación | Java |
SO | Multiplataforma |
Licencia | Licencia pública de Eclipse |
Extensiones de nombre de archivo | aj |
Sitio web | www |
Implementaciones importantes | |
Las herramientas de desarrollo de AspectJ para Eclipse |
Descripción de lenguaje simple
Todos los programas Java válidos también son programas AspectJ válidos, pero AspectJ permite a los programadores definir construcciones especiales llamadas aspectos . Los aspectos pueden contener varias entidades que no están disponibles para las clases estándar. Estos son:
- Métodos de extensión
- Permita que un programador agregue métodos, campos o interfaces a clases existentes desde dentro del aspecto. Este ejemplo agrega un método
acceptVisitor
(ver patrón de visitante ) a laPoint
clase:
aspecto VisitAspect { void Point . acceptVisitor ( Visitante v ) { v . visitar ( esto ); } }
- Pointcuts
- Permita que un programador especifique puntos de unión (momentos bien definidos en la ejecución de un programa, como llamadas a métodos, instanciación de objetos o acceso a variables). Todos los cortes de puntos son expresiones ( cuantificaciones ) que determinan si un punto de unión dado coincide. Por ejemplo, este corte puntual coincide con la ejecución de cualquier método de instancia en un objeto de tipo
Point
cuyo nombre comienza conset
:
pointcut set () : ejecución ( * set * (..) ) && this ( Point );
- Consejos
- Permita que un programador especifique código para que se ejecute en un punto de unión que coincida con un punto de corte . Las acciones se pueden realizar antes , después o alrededor del punto de unión especificado . Aquí, el consejo actualiza la pantalla cada vez que
Point
se activa algo , utilizando el punto de acceso declarado anteriormente:
after () : set () { Display . actualizar (); }
AspectJ también admite formas limitadas de verificación estática basada en cortes de puntos y reutilización de aspectos (por herencia). Consulte la Guía de programación de AspectJ para obtener una descripción más detallada del idioma.
Implementaciones y compatibilidad de AspectJ
AspectJ se puede implementar de muchas formas, incluido el tejido de código fuente o el tejido de código de bytes , y directamente en la máquina virtual (VM) . En todos los casos, el programa AspectJ se convierte en un programa Java válido que se ejecuta en una máquina virtual Java. Las clases afectadas por aspectos son compatibles binariamente con las clases no afectadas (para seguir siendo compatibles con las clases compiladas con los originales no afectados). La compatibilidad con múltiples implementaciones permite que el lenguaje crezca a medida que cambia la tecnología, y ser compatible con Java garantiza la disponibilidad de la plataforma.
La clave de su éxito ha sido la ingeniería y las decisiones lingüísticas que hacen que el idioma sea utilizable y los programas se puedan implementar. La implementación original de Xerox AspectJ utilizaba el tejido de fuentes, que requería acceso al código fuente. Cuando Xerox contribuyó con el código a Eclipse, AspectJ se volvió a implementar utilizando el compilador Java de Eclipse y un tejedor de código de bytes basado en BCEL , de modo que los desarrolladores pudieran escribir aspectos del código en forma binaria (.class). En este momento, el lenguaje AspectJ estaba restringido para admitir un modelo por clase esencial para la compilación incremental y el tejido en tiempo de carga. Esto hizo que las integraciones de IDE fueran tan receptivas como sus contrapartes de Java, y permitió a los desarrolladores implementar aspectos sin alterar el proceso de compilación. Esto condujo a una mayor adopción, ya que AspectJ se volvió utilizable para programadores Java impacientes y despliegues de nivel empresarial. Desde entonces, el equipo de Eclipse ha aumentado el rendimiento y la corrección, ha actualizado el lenguaje AspectJ para admitir características del lenguaje Java 5 como genéricos y anotaciones , e integrado aspectos de Java puro de estilo de anotación de AspectWerkz .
El proyecto Eclipse admite interfaces de línea de comandos y Ant . Un proyecto de Eclipse relacionado ha mejorado constantemente el soporte de Eclipse IDE para AspectJ (llamado AspectJ Development Tools ( AJDT ) ) y otros proveedores de estructura transversal. El soporte IDE para emacs , NetBeans y JBuilder fracasó cuando Xerox los puso en código abierto, pero apareció el soporte para JDeveloper de Oracle. El soporte de IDE ha sido clave para los programadores de Java que utilizan AspectJ y comprenden las preocupaciones transversales.
BEA ha ofrecido soporte de VM limitado para extensiones orientadas a aspectos, pero para las extensiones compatibles con todas las VM de Java, se requeriría un acuerdo a través del Proceso de la comunidad Java de Sun (consulte también el paquete java.lang.instrument disponible desde Java SE 5, que es un terreno común para Instrumentación de tiempo de carga de JVM).
El interés académico en la semántica y la implementación de lenguajes orientados a aspectos ha rodeado a AspectJ desde su lanzamiento. La implementación de investigación líder de AspectJ es AspectBench Compiler , o abc ; admite extensiones para cambiar la sintaxis y la semántica del lenguaje y forma la base de muchos experimentos de AOP que el equipo de AspectJ ya no puede soportar, dada su amplia base de usuarios.
Muchos programadores descubren AspectJ como una tecnología habilitadora para otros proyectos, sobre todo Spring AOP . Un proyecto hermano de Spring, Spring Roo , mantiene automáticamente declaraciones entre tipos de AspectJ como su salida principal de generación de código.
Historia y colaboradores
Gregor Kiczales inició y dirigió el equipo Xerox PARC que finalmente desarrolló AspectJ. Él acuñó el término transversal . En cuarto lugar en el equipo, Chris Maeda acuñó el término programación orientada a aspectos. Jim Hugunin y Erik Hilsdale ( miembros 12 y 13 del equipo Xerox PARC ) fueron los ingenieros originales del compilador y el tejedor, Mik Kersten implementó la integración IDE y comenzó el proyecto Eclipse AJDT con Adrian Colyer (actual líder del proyecto AspectJ ) y Andrew Clement (actual ingeniero de compilación).
El compilador AspectBench fue desarrollado y es mantenido como un esfuerzo conjunto de la herramientas de programación de grupo en el Computación Laboratorio de la Universidad de Oxford , el Grupo de Investigación del Sable en la Universidad McGill , y el Instituto de Investigación Básica en Ciencias de la Computación (BRICS) .
AspectWerkz
AspectWerkz es un marco AOP / AOSD dinámico, ligero y de alto rendimiento para Java . Se ha fusionado con el proyecto AspectJ, que admite la funcionalidad AspectWerkz desde AspectJ 5.
Jonas Boner y Alex Vasseur diseñaron el proyecto AspectWerkz y luego contribuyeron al proyecto AspectJ cuando se fusionó con el estilo de anotación AspectWerkz y el soporte de tejido en tiempo de carga.
A diferencia de AspectJ antes de la versión 5, AspectWerkz no agregó nuevas construcciones de lenguaje a Java, sino que admitió la declaración de aspectos dentro de las anotaciones de Java . Utiliza la modificación del código de bytes para tejer clases en el momento de la construcción del proyecto, el tiempo de carga de la clase y el tiempo de ejecución . Utiliza API de nivel JVM estandarizadas [ aclarar ] . Los aspectos se pueden definir utilizando anotaciones de Java (introducidas con Java 5), doclet personalizado de Java 1.3 / 1.4 o un archivo de definición XML simple.
AspectWerkz proporciona una API para utilizar los mismos aspectos para los proxies, por lo que proporciona una experiencia transparente, lo que permite una transición sin problemas para los usuarios familiarizados con los proxies.
AspectWerkz es un software gratuito . La licencia de estilo LGPL permite el uso de AspectWerkz 2.0 en proyectos comerciales y de código abierto.
Ver también
- Programación Orientada a Aspectos
- Spring AOP (parte del Spring Framework )
- Desarrollo de software orientado a aspectos
Referencias
- Laddad, Ramnivas (28 de septiembre de 2009), AspectJ en acción: Enterprise AOP with Spring (2ª ed.), Manning Publications , p. 550, ISBN 978-1-933988-05-4
- Miles, Russ (20 de diciembre de 2004), AspectJ Cookbook (1ª ed.), O'Reilly Media , p. 354, ISBN 978-0-596-00654-9
- Colyer, Adrian; Clemente, Andy; Harley, George; Webster, Matthew (24 de diciembre de 2004), Eclipse AspectJ: Programación orientada a aspectos con AspectJ y las herramientas de desarrollo Eclipse AspectJ (1ª ed.), Addison-Wesley Professional , p. 504, ISBN 978-0-321-24587-8
- Gradecki, Joseph D .; Lesiecki, Nicholas (7 de marzo de 2003), Mastering AspectJ: Programación orientada a aspectos en Java (1ª ed.), Wiley , págs. 456 , ISBN 978-0-471-43104-6
enlaces externos
- AJDT
- Banco de aspectos: https://web.archive.org/web/20170816093700/http://www.sable.mcgill.ca/abc/
- Página de inicio de AspectJ
- Página de inicio del proyecto AspectWerkz
- Mejore la modularidad con la programación orientada a aspectos
- Introducción a Spring AOP y AspectJ
- La guía de programación de AspectJ
- Xerox tiene la patente de EE. UU. 6,467,086 para AOP / AspectJ, pero publicó el código fuente de AspectJ bajo la Licencia Pública Común , que otorga algunos derechos de patente.
- ^ "Descargas de AspectJ - La Fundación Eclipse" . eclipse.org . Consultado el 5 de abril de 2021 .