English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
L'application est généralement développée en couches multiples. Un application Java typique a les couches suivantes:
Couche Web: Il utilise REST ou l'application Web pour l'ouvrirService。 Couche commerciale: Il met en œuvre les données de l'applicationLogique commerciale。 Couche de données: Il met en œuvre les données de l'applicationlogique de persistance。
Les responsabilités de chaque couche sont différentes, mais il y a des aspects communs à toutes les couches, tels que journalisation, sécurité, validation, cache, etc.. Ces aspects courants sont appelés Préoccupations transversales.
Si nous réalisons ces préoccupations à chaque couche, le code deviendra plus difficile à maintenir. Pour surmonter ce problème, Programmation orientée aspect(AOP) offre une solution pour résoudre les problèmes transversaux.
Considérer les préoccupations transversales comme un aspect. Définir les points d'entrée pour indiquer où appliquer l'aspect.
Il assure que les préoccupations transversales sont définies dans un composant de code cohérent.
AOP (Aspect-Programmation Orientée Objet)C'est une méthode qui permet Cross-cutting concernsPour améliorer le modèle de programmation modulaire, il sépare ces préoccupations transversales des logiques principales du commerce. Nous pouvons ajouter d'autres comportements aux codes existants sans modifier le code lui-même.
Le cadre AOP de Spring nous aide à réaliser ces préoccupations transversales.
En utilisant AOP, nous pouvons définir librement la manière et l'emplacement d'application de cette fonctionnalité, sans modifier la classe de la nouvelle fonctionnalité. Maintenant, le module de concern transversal peut être modularisé en classes spéciales appelées Aspect。
les aspects ont DeuxAvantages:
Premièrement, la logique de chaque point d'intérêt est maintenant concentrée à un seul endroit, au lieu d'être dispersée dans toute la bibliothèque de code. Deuxièmement, le module d'affaires ne contient que le code principal du point d'intérêt. Les points d'intérêt secondaires ont été déplacésAspect。
Chaque aspect a des responsabilités à exécuter, appelées Advice。Nous pouvons intégrer les fonctionnalités de l'aspect dans le programme à un ou plusieurs points de jonction.
Il est réalisé en Java pur. Il n'est pas nécessaire d'un processus de compilation spécial. Il ne prend en charge que les points de jonction d'exécution de méthode. fournissant uniquement le broderie à temps d'exécution. Il y a deux types de proxy AOP: Proxy JDK dynamiqueEt CGLIB proxy.
Cross-cutting concerns sont les points d'intérêt que nous devons réaliser à plusieurs endroits dans l'application. Ils affectent tout l'application.
Aspect : Un aspect est un module qui encapsuleadviceEtpointcutset fournircross-cuttingIl peut y avoir plusieurs aspects. Nous pouvons utiliser des @Aspect les classes normales annotées pour réaliser les aspects. Pointcut : Un point de jonction est une expression qui sélectionne un ou plusieurs points de jonction où l'Advice est exécuté. Nous pouvons utiliserexpressionsoupatternsDéfinit le point de jonction. Il utilise différents types d'expressions pour correspondre aux points de jonction. Dans le cadre Spring Framework, on utilise AspectJ Expression de point de jonction. Join point: Un point de jonction est un point où un aspect est appliqué dans l'application. AOP aspectles points.l'exécution de la méthode, la gestion des exceptions, la modification de la valeur des variables d'objetavant, pendant, après Advice : Advice est ce que nous appelonsbeforeouaftermesures prises. L'action est un segment de code appelé pendant l'exécution du programme. Le cadre Spring AOP acinqTypes d'Advice: dans Advicebefore, after, after-returning, après-throwing etaround advice. Il s'agit d'un Advice destiné à un point de jonction spécifiqueAdvice de point de jonction. Nous discuterons plus en détail de ces Advice dans cette section. Target object: Un objet appliquant l'Advice est appelétarget object。L'objet cible est toujoursproxiedCela signifie que pendant l'exécution, une sous-classe couvrant la méthode cible sera créée et contiendra des Advice selon sa configuration. Weaving : C'est le processus de lier les aspects avec d'autres types d'applications.liant les aspectsNous pouvonsAu chargement du temps d'exécution, le processus.EtÀ la compilationBroderie.
Proxy : C'est l'objet créé après l'application de l'Advice sur l'objet cible, appelé proxy . Spring AOP implémente Proxy JDK dynamique, pour utiliser la classe cible et l'Advice pour créer une classe proxy. Ce sont les classes proxy AOP.
La différence entre AOP et OOP est la suivante :
AOP | OOP |
Aspect : Un unité de code encapsulant des points d'entrée, des conseils et des propriétés. | Classe : Un unité de code encapsulant des méthodes et des propriétés. |
Pointcut : Il définit un ensemble d'entrées pour l'exécution de l'Advice. | Signature de méthode : . Il définit le point d'entrée pour l'exécution du corps de méthode. |
Advice : C'est l'implémentation de l'intérêt transversal de domaine. | Corps de méthode : C'est l'implémentation des problèmes de logique métier. |
Waver : construit le code à l'aide d'Advice (source ou objet). | Compilateur : il convertit le code source en code cible. |
La différence entre AOP et OOP est la suivante :
Spring AOP | AspectJ |
Il nécessite un processus de compilation séparé. | Il nécessite le compilateur AspectJ. |
Il ne prend en charge que les points d'entrée d'exécution des méthodes. | Il prend en charge tous les points d'entrée. |
Il peut être mis en œuvre sur les beans gérés par le conteneur Spring. | Il peut être mis en œuvre sur tous les objets domaines. |
Il ne prend en charge que le broderie au niveau des méthodes. | Il peut varier des champs, des méthodes, des constructeurs, des initialisateurs statiques, des classes finales, etc. |
Les conseils AOP ont cinq types, tels que :
Advice Before Advice After Advice autour Après le lancement Après le retour
Advice Before : L'Advice exécuté avant le point de connexion est appelé avant la notification. Nous utilisons : @Before Les commentaires marquent l'Advice comme une notification Before.
Advice After : L'Advice exécutée après le point de connexion est appelée notification after. Nous utilisons : @After Les annotations marquent l'Advice comme une notification After.
Advice autour : Les Advice exécutées avant et après le point de connexion sont :
Après le lancement : Advice exécutée lorsque l'exception est levée au point de connexion.
After Returning: 当方法成功执行时执行的Advice。
在应用程序中实现AOP之前,我们需要在pom.xml文件中添加 Spring AOP 依赖项。
Spring Boot Starter AOP是提供Spring AOP和AspectJ的依赖项。 AOP提供基本的AOP功能,而AspectJ提供完整的AOP框架。
<dependency> <groupId>org.springframework.boot</<groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.2.2.RELEASE</version> </dependency>
在下一节中,我们将在应用程序中实现不同的Advice。