English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

SpringBoot AOP

L'applicazione è spesso sviluppata in modo multi-strato. Un'applicazione Java tipica ha i seguenti strati:

strato Web: Utilizza REST o Web application per rendere pubblicoservizio. strato del business: Implementa illogica del business. strato di dati: Implementa illogica di persistenza.

Le responsabilità di ogni strato sono diverse, ma ci sono aspetti comuni applicabili a tutti gli strati, come registrazione, sicurezza, convalida, cache e così via. Questi aspetti comuni sono chiamati Interessi trasversali.

Se implementassimo questi interessi a livello di ciascun strato, il codice diventerebbe più difficile da mantenere. Per superare questo problema, Programmazione orientata agli aspetti(AOP) fornisce una soluzione per risolvere problemi trasversali.

Considerare gli interessi trasversali come un aspetto. Definire i punti di intersezione per indicare dove applicare gli aspetti.

Assicura che gli interessi trasversali siano definiti in un componente di codice coeso.

AOP

AOP (Programmazione Orientata agli Aspetti)È una soluzione che permette di Preoccupazioni trasversaliLa separazione migliora il modello di programmazione modulare. Questi interessi trasversali sono diversi dalla logica principale del business. Possiamo aggiungere altre azioni al codice esistente senza modificare il codice stesso.

Il framework AOP di Spring ci aiuta a realizzare questi interessi trasversali.

Utilizzando AOP, possiamo definire liberamente il modo e la posizione di applicazione di questa funzione, senza modificare la classe che introduce la nuova funzionalità. Ora, possiamo modularizzare il modulo di preoccupazione trasversale in classi speciali chiamate Aspetto.

aspetti hanno dueVantaggi:

Prima di tutto, la logica di ogni preoccupazione è ora concentrata in un unico luogo, non dispersa in tutto il repository di codice. In secondo luogo, il modulo di business contiene solo il codice principale di interesse. Le preoccupazioni secondarie sono state spostateAspetto.

Ogni aspetto ha un obbligo da eseguire chiamato Advice. Possiamo implementare le funzionalità dell'aspetto in un o più punti di intersezione nel programma.

Vantaggi AOP

È implementato in Java puro. Non richiede un processo di compilazione speciale. Supporta solo i punti di intersezione di esecuzione del metodo. fornisce solo intreccio in tempo di esecuzione. Ci sono due tipi di proxy AOP: JDK动态代理 proxy CGLIB.

Preoccupazioni trasversali

Preoccupazioni trasversali sono le preoccupazioni che dobbiamo implementare in più posizioni dell'applicazione. Influiscono su tutta l'applicazione.

termini AOP

Aspect: Un aspetto è un modulo che incapsulaadvicepointcutse fornirecross-cuttingCi possono essere molti aspetti. Possiamo utilizzare aspetti con @Aspect classi di tipo comune con annotazioni Pointcut: Il punto di intersezione è un'espressione che seleziona uno o più punti di intersezione dove eseguire l'Advice. Possiamo utilizzareespressioniomodelliDefinisce il punto di intersezione. Utilizza espressioni di diversi tipi che corrispondono ai punti di intersezione. Nel framework Spring, si utilizzano AspectJ linguaggio di espressione di punto di intersezione. Punto di intersezione: Il punto di intersezione è il punto in cui viene applicato l'AOP nell'applicazione. faccetta AOPO è un'istanza specifica di esecuzione dell'Advice. In AOP, il punto di intersezione può esserepunti.e così via. È il punto in cui eseguiamo, gestione delle eccezioni, modifica dei valori delle variabili dell'oggetto. Advice: Advice è il punto in cui eseguiamo prima dell'esecuzione del metodobeforeoafterazioni da intraprendere. L'azione è un segmento di codice chiamato durante l'esecuzione del programma. Il framework Spring AOP hacinqueTipi di Advice: In Advice prima, dopo, after-returning, after-throwing eAdvice intorno. È rivolto a un tipo specificoAdvice del punto di intersezione. In questa sezione discuteremo ulteriormente questi Advice. Oggetto di destinazione: Un oggetto che ha applicato l'Advice si chiamaoggetto di destinazioneL'oggetto di destinazione è sempreproxiedQuesto significa che durante l'esecuzione verrà creato un sottogetto che copre il metodo di destinazione e include l'Advice configurato. Weaving: 这是将各个方面与其他应用程序类型进行linking aspects的过程。我们可以在运行时,加载时间编译时进行织造。

Proxy: 它是在将Advice应用于目标对象后创建的对象,称为 proxy 。 Spring AOP实现了 JDK动态代理,以使用目标类和Advice调用创建代理类。这些称为AOP代理类。

AOP与OOP

AOP与OOP之间的区别如下:

AOP OOP
Aspect: 一个封装切入点,Advice和属性的代码单元。Class: 一个封装方法和属性的代码单元。
Pointcut: 它定义了执行Advice的一组入口点。Method signature: 。它定义了执行方法主体的入口点。
Advice: 这是跨领域关注点的实现。Method bodies: 是业务逻辑问题的实现。
Waver: 借助Advice构造代码(源或对象)。 Compiler: 它将源代码转换为目标代码。

Spring AOP与AspectJ

AOP和OOP之间的区别如下:

Spring AOP AspectJ
需要单独的编译过程。它需要AspectJ编译器。
它仅支持方法执行切入点。它支持所有切入点。
它可以在Spring Container管理的bean上实现。它可以在所有域对象上实现。
它仅支持方法级编织。它可以波动字段,方法,构造函数,静态初始化器,最终类等。

AOP Advice的类型

AOP Advice有五种类型,如下所示:

Before Advice After Advice Around Advice After Throwing After Returning

Before Advice: 在连接点之前执行的Advice在通知之前被调用。我们使用 @Before 批注将Advice标记为Before通知。

After Advice: 在连接点之后执行的Advice被称为after notification。我们使用 @After 注解将Advice标记为After通知。

Around Advice: 在连接点之前和之后执行的Advice是

After Throwing: 在连接点抛出异常时执行的 Advice。

After Returning: 当方法成功执行时执行的 Advice。

在应用程序中实现 AOP 之前,我们需要在 pom.xml 文件中添加 Spring AOP 依赖项。

Spring Boot Starter 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。