stringtranslate.com

AspectoJ

AspectJ es una extensión de programación orientada a aspectos (AOP) para el lenguaje de programación Java , creada en PARC . Está disponible en 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 AOP al enfatizar la simplicidad y usabilidad para los usuarios finales. Utiliza una sintaxis similar a Java e incluye integraciones IDE para mostrar una 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 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 la Pointclase:
aspecto VisitAspect { punto vacío . aceptarVisitante ( Visitante v ) { v . visita ( esto ); } }        
Cortes puntuales
Permitir que un programador especifique puntos de unión (momentos bien definidos en la ejecución de un programa, como llamada a método, creación de instancias de objetos o acceso a variables). Todos los puntos de corte son expresiones ( cuantificaciones ) que determinan si un punto de unión determinado 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:
set de corte de puntos () : ejecución ( * set * (..) ) && this ( Punto );       
Consejos
Permita que un programador especifique el código que se 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 . Aquí, el consejo actualiza la pantalla cada vez que Pointse activa algo, utilizando el punto de acceso declarado anteriormente:
después () : 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 se puede implementar de muchas maneras, 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 la compatibilidad con Java garantiza la disponibilidad de la plataforma.

La clave de su éxito han sido las decisiones de ingeniería y lenguaje que hacen que el lenguaje sea utilizable y los programas implementables. La implementación original de Xerox AspectJ utilizaba tejido de código fuente, lo que requería acceso al código fuente. Cuando Xerox contribuyó con el código a Eclipse, AspectJ se reimplementó utilizando el compilador Java de Eclipse y un tejedor de código de bytes basado en BCEL , para que los desarrolladores pudieran escribir aspectos del código en formato binario (.class). En ese 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 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 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 Ant y de línea de comandos . Un proyecto relacionado con Eclipse ha mejorado constantemente el soporte de Eclipse IDE para AspectJ (llamado Herramientas de desarrollo de AspectJ ( 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 sí apareció soporte para JDeveloper de Oracle. El soporte IDE ha sido clave para los programadores de Java que utilizan AspectJ y comprenden las preocupaciones transversales.

BEA ha ofrecido soporte limitado de VM para extensiones orientadas a aspectos, pero para extensiones soportadas en todas las VM Java 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 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 principal implementación de investigación de AspectJ es el compilador AspectBench, o abc ; admite extensiones para cambiar la sintaxis y la semántica del lenguaje y forma la base para 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 las declaraciones entre tipos de AspectJ como su principal salida de generación de código.

Historia y contribuyentes

Gregor Kiczales inició y dirigió el equipo Xerox PARC que finalmente desarrolló AspectJ. Acuñó el término transversal . Cuarto 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 compiladores y tejedores originales, Mik Kersten implementó la integración IDE y comenzó el proyecto Eclipse AJDT con Adrian Colyer y Andrew Clement. Después de Adrian Colyer, Andrew Clement asumió el cargo de líder del proyecto y colaborador principal de AspectJ. Desde entonces, AJDT se retiró como un proyecto independiente y se incorporó al proyecto general Eclipse AspectJ para agilizar el mantenimiento. Sin embargo, tanto AspectJ como AJDT todavía se mantienen en repositorios de origen separados.

En 2021, Alexander Kriegisch se unió al proyecto, primero como colaborador y luego como responsable y mantenedor. Desde marzo de 2021, es básicamente el único mantenedor. Desde 2024, también es formalmente el líder de los proyectos AspectJ y AJDT.

El compilador AspectBench fue desarrollado y 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).

AspectoWerkz

AspectWerkz era un marco AOP/AOSD dinámico, liviano y de alto rendimiento para Java . Se ha fusionado con el proyecto AspectJ, [2] 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ó en 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ó 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 tejer clases en el tiempo de construcción del proyecto, en el tiempo de carga de la clase y en el tiempo de ejecución . Utiliza API estandarizadas a nivel de JVM [ aclarar ] . Los aspectos se pueden definir utilizando anotaciones de Java (introducidas con Java 5), ​​un doclet personalizado de Java 1.3/1.4 o un simple archivo de definición XML.

AspectWerkz proporciona una API para utilizar los mismos aspectos para los servidores proxy, proporcionando así una experiencia transparente y permitiendo una transición fluida para los usuarios familiarizados con los servidores proxy.

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

Ver también

Referencias

  1. ^ "Versión 1.9.22.1". 11 de mayo de 2024 . Consultado el 20 de mayo de 2024 .
  2. ^ "AspectJ y AspectWerkz unirán fuerzas". Aspectwerkz . 2006-07-12. Archivado desde el original el 12 de julio de 2006 . Consultado el 19 de marzo de 2024 .

enlaces externos