English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Esta aplicación es generalmente desarrollada en capas múltiples. Un aplicación Java típica tiene las siguientes capas:
Capa web: Usa REST o aplicaciones web para hacer públicoServicio. Capa de negocio: Implementa laLógica de negocio. Capa de datos: Implementa lalógica de persistencia.
Las responsabilidades de cada capa son diferentes, pero hay aspectos comunes aplicables a todas las capas, como registro de log, seguridad, validación, caché, etc.. Estos aspectos comunes se conocen como Intereses transversales.
Si implementamos estos intereses en cada capa, el código se volverá más difícil de mantener. Para superar este problema, Programación orientada a aspectos(AOP) proporciona una solución para los problemas transversales.
Considera los intereses transversales como un aspecto. Define los puntos de intersección para indicar dónde se debe aplicar el aspecto.
Asegura que los intereses transversales se definen en un componente de código cohesivo.
AOP (Aspecto-Programación Orientada a Objetos)Es una que permite Cross-cutting concernsLa separación mejora el patrón de programación modular. Estos intereses transversales son diferentes de la lógica principal del negocio. Podemos agregar otros comportamientos al código existente sin modificar el código en sí.
El framework AOP de Spring nos ayuda a implementar estos intereses transversales.
Al usar AOP, estamos en un lugar. Podemos definir libremente la manera y la ubicación de aplicación de esta función, sin modificar la clase de nueva funcionalidad. Ahora, se puede modularizar el módulo de concerns transversales en clases especiales llamadas Aspectos.
aspectos tienen DosVentajas:
Primero, la lógica de cada punto de atención ahora está concentrada en un solo lugar, en lugar de estar distribuida por toda la biblioteca de código. En segundo lugar, el módulo de negocio contiene solo el código principal de la atención. Los puntos de atención secundarios se han movido aAspectos.
Cada aspecto tiene responsabilidades que deben ejecutarse, llamadas AdvicePodemos implementar las funcionalidades del aspecto en un o más puntos de conexión del programa.
Se implementa con Java puro. No requiere proceso de compilación especial. Sólo admite puntos de conexión de ejecución de métodos. que solo proporciona compilar en tiempo de ejecución. Hay dos tipos de proxies AOP: Proxy dinámico de JDKY 代理CGLIB。
Cross-cutting concerns son los puntos de atención que queremos implementar en múltiples ubicaciones de la aplicación. Impacta toda la aplicación.
Aspecto: Un aspecto es un módulo que encapsulaadviceYpointcutsy proporcionarcross-cuttingPueden haber muchos aspectos. Podemos usar @Aspect clases comunes con anotaciones para implementar aspectos. Punto de entrada: El join point es una expresión que selecciona uno o más puntos de ejecución del Advice. Podemos usarexpresionesopatronesDefine el join point. Utiliza diferentes tipos de expresiones que coinciden con el join point. En el framework Spring, se utilizan AspectJ expression language for切入点. Join point: El join point es donde se aplica en la aplicación AOP aspectO es una instancia específica de ejecución de Advice. En AOP, el join point puede serpuntos.etc. El punto es el método de ejecución, el manejo de excepciones, el cambio de valores de variables de objeto Advice: Advice es lo que ejecutamos antes de la ejecución del método,beforeoaftermedidas adoptadas. La acción es un fragmento de código llamado durante la ejecución del programa. El framework Spring AOP tienecincoAdvice de tipo: en Advicebefore, after, after-returning, después-throwing yaround advice. Es para un join point específicoAdvice de join point. Vamos a discutir estos Advice en esta sección. Target object: Un objeto que aplica Advice se llamatarget objectEl objeto objetivo siempre esproxiedEsto significa que en tiempo de ejecución se creará una subclase que cubre el método objetivo y contiene Advice según su configuración. Weaving: Weaving:Esto es el proceso de conectar aspectos con otros tipos de aplicaciones.linking aspectsTiempo de carga, proceso de tiempo de ejecución. Podemos enYCompilaciónTejido.
Proxy: Es el objeto creado después de aplicar Advice al objeto objetivo, llamado proxy . Spring AOP implementa Proxy dinámico de JDK, para usar la clase objetivo y Advice para crear la clase proxy. Estas se llaman clases proxy AOP.
La diferencia entre AOP y OOP es la siguiente:
AOP | OOP |
Aspecto: Un código de unidad encapsulado por puntos de entrada, Advice y propiedades. | Clase: Un código de unidad encapsulado por métodos y propiedades. |
Punto de entrada: Define un conjunto de puntos de entrada para la ejecución del Advice. | Firma del método: . Define el punto de entrada para la ejecución del cuerpo del método. |
Advice: Esto es la implementación de preocupaciones transversales. | Cuerpos de métodos: Es la implementación de problemas de lógica de negocio. |
Waver: construye código (fuente o objeto) con Advice. | Compilador: convierte el código fuente en código objetivo. |
La diferencia entre AOP y OOP es la siguiente:
Spring AOP | AspectJ |
Necesita un proceso de compilación separado. | Necesita el compilador AspectJ. |
Sólo admite puntos de entrada de ejecución de métodos. | Admite todos los puntos de entrada. |
Se puede implementar en beans gestionados por el contenedor de Spring. | Se puede implementar en todos los objetos de dominio. |
Sólo admite la costura a nivel de método. | Puede fluctuar en campos, métodos, constructores, inicializadores estáticos, clases finales, etc. |
El Advice AOP tiene cinco tipos, como se muestra a continuación:
Advice Antes Advice Después Advice de alrededor Después de lanzar Después de regresar
Advice Antes: El Advice ejecutado antes del punto de conexión se llama antes de la notificación. Usamos @Before Los comentarios marcan el Advice como notificación Antes.
Advice Después: El Advice ejecutado después del punto de conexión se llama notificación después. Usamos @After La anotación marca el Advice como notificación Después.
Advice de alrededor: El Advice ejecutado antes y después del punto de conexión es
Después de lanzar: El Advice ejecutado al lanzar una excepción en el punto de conexión.
After Returning: Advice ejecutada cuando el método se ejecuta con éxito.
Antes de implementar AOP en la aplicación, necesitamos agregar en el archivo pom.xml Spring AOP Dependencias.
Spring Boot Starter AOP es el dependiente que proporciona Spring AOP y AspectJ. AOP proporciona las funciones básicas de AOP, mientras que AspectJ proporciona el marco completo de AOP.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.2.2.RELEASE</version> </dependency>
En la próxima sección, implementaremos diferentes Advice en la aplicación.