Articulo de referencia

AspectoJ

AspectJ es una extensión de programación orientada a aspectos (POA) para el lenguaje de programación Java , creada en PARC . Está disponible en los proyectos de código abierto d...

AspectJ es una extensión de programación orientada a aspectos (POA) para el lenguaje de programación Java , creada en PARC . Está disponible en los proyectos de código abierto de la Fundación Eclipse , tanto de forma independiente como integrada en Eclipse . AspectJ se ha convertido en un estándar de facto ampliamente utilizado para la POA gracias a su simplicidad y facilidad de uso para los usuarios finales. Utiliza una sintaxis similar a la de Java e incluye integraciones con IDE para mostrar la estructura transversal desde su lanzamiento público inicial en 2001.

Descripción en lenguaje sencillo

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 no disponibles para las clases estándar. Estas son:

Métodos de extensión
Permite a un programador agregar métodos, campos o interfaces a clases existentes desde dentro del aspecto. Este ejemplo agrega un método acceptVisitor(ver patrón Visitor ) a la Pointclase:
aspecto VisitAspect { void Point . acceptVisitor ( Visitor v ) { v . visit ( this ); } }
Cortes de punta
Permite a un programador especificar puntos de unión (momentos bien definidos en la ejecución de un programa, como la llamada a un método, la instanciación de un objeto o el acceso a una variable). Todos los puntos de corte son expresiones ( cuantificaciones ) que determinan si un punto de unión dado coincide. Por ejemplo, este punto de corte coincide con la ejecución de cualquier método de instancia en un objeto de tipo Pointcuyo nombre comienza con set:
punto de corte conjunto () : ejecución ( * conjunto * (..) ) && este ( Punto );
Consejos
Permite a un programador especificar código para ejecutar 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. En este caso, el consejo actualiza la pantalla cada vez que se establece algo en Point, utilizando el punto de corte declarado anteriormente:
después de () : establecer () { Mostrar . actualizar (); }

AspectJ también admite formas limitadas de verificación estática basada en puntos de corte 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 lenguaje.

Compatibilidad e implementaciones de AspectJ

AspectJ puede implementarse de diversas maneras, incluyendo la inserción de código fuente o de bytecode , 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 VM Java. Las clases afectadas por los aspectos son compatibles binariamente con las clases no afectadas (para mantener la compatibilidad con las clases compiladas con las originales no afectadas). La compatibilidad con múltiples implementaciones permite que el lenguaje evolucione a medida que la tecnología cambia, y la compatibilidad 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 lenguaje sea utilizable y los programas implementables. La implementación original de Xerox AspectJ utilizaba la interpolación de código fuente, lo que requería acceso al código fuente. Cuando Xerox aportó el código a Eclipse, AspectJ se reimplementó utilizando el compilador Java de Eclipse y un interpolador de bytecode basado en BCEL , de modo que los desarrolladores pudieran escribir aspectos para código en formato binario (.class). En ese momento, el lenguaje AspectJ estaba restringido a admitir un modelo por clase esencial para la compilación incremental y la interpolación en tiempo de carga. Esto hizo que las integraciones con IDE fueran tan receptivas como sus contrapartes 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 e implementaciones a nivel empresarial. Desde entonces, el equipo de Eclipse ha mejorado el rendimiento y la corrección, ha actualizado el lenguaje AspectJ para admitir características del lenguaje Java 5 como genéricos y anotaciones , y ha integrado aspectos de Java puro con estilo de anotación de AspectWerkz .

El proyecto Eclipse admite interfaces tanto de línea de comandos como de Ant . Un proyecto relacionado de Eclipse ha mejorado progresivamente la compatibilidad del IDE de Eclipse con AspectJ (denominado Herramientas de Desarrollo de AspectJ ( AJDT ) ) y otros proveedores de estructuras transversales. La compatibilidad del IDE con emacs , NetBeans y JBuilder fracasó cuando Xerox los liberó como código abierto, pero sí surgió la compatibilidad con JDeveloper de Oracle. La compatibilidad del IDE ha sido fundamental para que los programadores Java que utilizan AspectJ comprendan las cuestiones transversales.

BEA ha ofrecido soporte limitado para máquinas virtuales en lo que respecta a extensiones orientadas a aspectos, pero para extensiones compatibles con todas las máquinas virtuales Java se requeriría un acuerdo a través del Proceso de la Comunidad Java de Sun (véase también el paquete java.lang.instrument disponible desde Java SE 5, que es un punto de encuentro para la instrumentación en tiempo de carga de la JVM).

Desde su lanzamiento, AspectJ ha despertado un gran interés académico en la semántica y la implementación de lenguajes orientados a aspectos . La principal implementación de investigación de AspectJ es el compilador AspectBench , o abc ; este admite extensiones para modificar la sintaxis y la semántica del lenguaje y constituye la base de numerosos experimentos de programación orientada a aspectos (POA) que el equipo de AspectJ ya no puede mantener debido a su amplia base de usuarios.

Muchos programadores descubren AspectJ como una tecnología facilitadora para otros proyectos, en particular Spring AOP . Un proyecto hermano de Spring, Spring Roo , mantiene automáticamente las declaraciones entre tipos de AspectJ como su principal resultado de generación de código.

Historia y colaboradores

Gregor Kiczales fundó y dirigió el equipo de Xerox PARC que finalmente desarrolló AspectJ. Acuñó el término "crosscutting" . Chris Maeda , cuarto miembro del equipo, acuñó el término "aspect-oriented programming" (programación orientada a aspectos). Jim Hugunin y Erik Hilsdale ( miembros 12 y 13 del equipo de Xerox PARC ) fueron los ingenieros originales del compilador y del weaver, respectivamente. Mik Kersten implementó la integración con el IDE e inició el proyecto Eclipse AJDT con Adrian Colyer y Andrew Clement . Tras Adrian Colyer, Andrew Clement asumió el liderazgo del proyecto y fue el principal colaborador de AspectJ. Desde entonces, AJDT se ha retirado como proyecto independiente y se ha integrado en el proyecto paraguas Eclipse AspectJ para optimizar su mantenimiento. Sin embargo, tanto AspectJ como AJDT se siguen manteniendo en repositorios de código fuente separados.

En 2021, Alexander Kriegisch se unió al proyecto, primero como colaborador y luego como responsable de mantenimiento. Desde marzo de 2021, es prácticamente el único responsable de mantenimiento. Desde 2024, también es formalmente el líder del proyecto AspectJ y AJDT.

El compilador AspectBench fue desarrollado y es mantenido como un esfuerzo conjunto del Grupo de Herramientas de Programación del Laboratorio de Computación de la Universidad de Oxford , el Grupo de Investigación Sable de la Universidad McGill y el Instituto de Investigación Básica en Ciencias de la Computación (BRICS) .

AspectWerkz

AspectWerkz era un marco AOP/AOSD dinámico, ligero y de alto rendimiento para Java . Se fusionó con el proyecto AspectJ, [ 2 ] que admite la funcionalidad de AspectWerkz desde AspectJ 5.

Jonas Boner y Alex Vasseur diseñaron el proyecto AspectWerkz y, posteriormente, contribuyeron al proyecto AspectJ cuando este incorporó el estilo de anotación de AspectWerkz y la compatibilidad con la inserción de código en tiempo de carga.

A diferencia de AspectJ antes de la versión 5, AspectWerkz no añadió ninguna construcción de lenguaje nueva 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 integrar clases en tiempo de compilación del proyecto, tiempo de carga de clases y tiempo de ejecución . Utiliza API estandarizadas a nivel de JVM . Los aspectos se pueden definir mediante anotaciones de Java (introducidas con Java 5), ​​un 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, lo que ofrece una experiencia transparente y permite una transición fluida para los usuarios familiarizados con los proxies.

AspectWerkz es software libre . La licencia tipo LGPL permite el uso de AspectWerkz 2.0 tanto en proyectos comerciales como de código abierto.

Véase también

Referencias

  1. "Versión 1.9.25.1" . 17 de diciembre de 2025. Consultado el 19 de diciembre de 2025 .
  2. "AspectJ y AspectWerkz unirán fuerzas" . Aspectwerkz . 12 de julio de 2006. Archivado del original el 12 de julio de 2006. Consultado el 19 de marzo de 2024 .
  • Laddad, Ramnivas (28 de septiembre de 2009), AspectJ en acción: AOP empresarial con Spring (2.ª  ed.), Manning Publications , pág.  550, ISBN 978-1-933988-05-4
  • Miles, Russ (20 de diciembre de 2004), AspectJ Cookbook (1.ª  ed.), O'Reilly Media , pág.  354, ISBN 978-0-596-00654-9
  • Colyer, Adrian; Clement, Andy; Harley, George; Webster, Matthew (24 de diciembre de 2004), Eclipse AspectJ: Programación orientada a aspectos con AspectJ y las herramientas de desarrollo de Eclipse AspectJ (1.ª  ed.), Addison-Wesley Professional , pág.  504, ISBN 978-0-321-24587-8
  • Gradecki, Joseph D.; Lesiecki, Nicholas (7 de marzo de 2003), Mastering AspectJ: Aspect-Oriented Programming in Java (1.ª  ed.), Wiley , 456 págs. , ISBN  978-0-471-43104-6
  • AJDT
  • Banco Aspect  : https://web.archive.org/web/20170816093700/http://www.sable.mcgill.ca/abc/
  • Página principal de AspectJ
  • Página principal del proyecto AspectWerkz
  • Mejora 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 posee la patente estadounidense 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.