¿En qué consiste la programación orientada a aspectos? ¿Cuánto demanda y cuáles son las oportunidades?

La Programación Orientada a Aspectos (AOP) complementa la Programación Orientada a Objetos (OOP) al proporcionar otra forma de pensar sobre la estructura del programa. La unidad clave de modularidad en OOP es la clase, mientras que en AOP la unidad de modularidad es el aspecto . Los aspectos permiten la modularización de preocupaciones tales como la gestión de transacciones que atraviesan múltiples tipos y objetos. (Tales preocupaciones a menudo se denominan preocupaciones transversales en la literatura de AOP).
Uno de los componentes clave de Spring es el marco AOP . Si bien el contenedor Spring IoC no depende de AOP, lo que significa que no necesita usar AOP si no lo desea, AOP complementa Spring IoC para proporcionar una solución de middleware muy capaz.

AOP se utiliza en Spring Framework para …
1. Proporcionar servicios empresariales declarativos, especialmente como reemplazo de los servicios declarativos EJB. El servicio más importante es la gestión de transacciones declarativas .
2. Permitir a los usuarios implementar aspectos personalizados, complementando su uso de OOP con AOP.

Conceptos AOP

  • Aspecto : una modularización de una preocupación que atraviesa múltiples clases. La gestión de transacciones es un buen ejemplo de una preocupación transversal en las aplicaciones Java empresariales. En Spring AOP, los aspectos se implementan utilizando clases regulares (el enfoque basado en esquemas) o clases regulares anotadas con la @Aspectannotation (el estilo @AspectJ).
  • Punto de unión : un punto durante la ejecución de un programa, como la ejecución de un método o el manejo de una excepción. En Spring AOP, un punto de unión siempre representa la ejecución de un método.
  • Consejo : acción tomada por un aspecto en un punto de unión particular. Los diferentes tipos de consejos incluyen consejos “alrededor”, “antes” y “después”. (Los tipos de consejos se analizan a continuación.) Muchos marcos de AOP, incluido Spring, modelan un consejo como un interceptor , manteniendo una cadena de interceptores alrededor del punto de unión.
  • Pointcut : un predicado que coincide con los puntos de unión. El asesoramiento está asociado con una expresión de corte de punto y se ejecuta en cualquier punto de unión que coincida con el corte de punto (por ejemplo, la ejecución de un método con un nombre determinado). El concepto de puntos de unión tal como coinciden con las expresiones de corte de punto es fundamental para AOP, y Spring usa el lenguaje de expresión de corte de punto de AspectJ de manera predeterminada.
  • Introducción : declarar métodos o campos adicionales en nombre de un tipo. Spring AOP le permite introducir nuevas interfaces (y una implementación correspondiente) a cualquier objeto recomendado. Por ejemplo, podría usar una introducción para hacer que un bean implemente una interfaz IsModified, para simplificar el almacenamiento en caché. (Una introducción se conoce como una declaración entre tipos en la comunidad de AspectJ).
  • Objeto de destino : objeto aconsejado por uno o más aspectos. También se conoce como el objeto aconsejado . Dado que Spring AOP se implementa utilizando proxies de tiempo de ejecución, este objeto siempre será un objeto proxy .
  • Proxy AOP : un objeto creado por el marco AOP para implementar los contratos de aspecto (asesorar ejecuciones de métodos, etc.). En Spring Framework, un proxy AOP será un proxy dinámico JDK o un proxy CGLIB.
  • Tejido : vincula aspectos con otros tipos de aplicaciones u objetos para crear un objeto recomendado. Esto se puede hacer en tiempo de compilación (usando el compilador AspectJ, por ejemplo), tiempo de carga o en tiempo de ejecución. Spring AOP, como otros frameworks de Java AOP puro, realiza el tejido en tiempo de ejecución.

AOP es un paradigma de programación que se ocupa de las preocupaciones secundarias [preocupaciones transversales] que las técnicas tradicionales de OO no pueden manejar como el registro, la depuración, etc. En pocas palabras, AOP resume las preocupaciones transversales en “Aspectos” que afectarán múltiples puntos en el programa de manera bien modularizada y evitarán líneas de código dispersas de espagueti , que son preocupaciones completamente diferentes con respecto al programa principal [Business Logic]