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

SpringBoot AOP @AfterReturning

After returningÈ una raccomandazione di Spring AOP, solitamente chiamata dopo l'esecuzione completata (eseguita) del punto di intercettazione. Non viene chiamata se si verifica un'eccezione. Possiamo usare @AfterReturning I commenti vengono implementati dopo che l'applicazione restituisce le raccomandazioni. I commenti marcano le funzioni come raccomandazioni da eseguire prima del metodo coperto da PointCut.

在返回的建议运行之后,当匹配的方法执行正常返回值时,便会执行该建议。我们在return属性中定义的名称必须与advice方法中的参数名称相对应。当方法返回值时,该值将作为相应的参数值传递到通知方法。

让我们在应用程序中返回通知后实现。

SpringBoot AOP @AfterReturning

步骤1: 打开Spring Initializr http://start.spring.io 。

步骤2: 提供 Group 名称。我们提供了组名 com.w3codebox。

步骤3: 提供了 Artifact Id。提供Artifact Id aop-after-returning-advice-example。

步骤4: 添加 Spring Web 依赖项。

步骤5: 点击 生成按钮。当我们单击"生成"按钮时,它将所有规范包装在 jar 文件中,并将其下载到本地系统。

步骤6: 提取

第7步: 使用以下步骤导入文件夹:

文件->导入->现有Maven项目->下一步->浏览文件夹 aop-returning-advice-example示例->完成。

步骤8: Apri pom.xml 文件并添加以下 AOP 依赖项。它是使用 Spring AOP AspectJ 进行面向方面编程的入门。

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
<modelVersion>4.0.0</modelVersion>
<groupId>com.w3codebox</groupId>
<artifactId>aop-after-returning-advice-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>aop-after-returning-advice-example</name>
<description>Progetto demo per Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

Passo 9: Nella src/main/java cartella Creare un nome di com.w3codebox.model in questo pacchetto.

Passo 10: nel pacchetto Creare un'istanza di Account del tipo

在"Account"类中,执行以下操作:

定义了两个类型为String的变量 accountNumber accountType 右键单击文件->源->使用字段生成构造函数 生成Getters。
右键单击文件-> Source-> Generate Getters and Setters->选择Getters-> Generate
生成 toString()
右键单击文件->源->生成toString()...

Account.java

package com.w3codebox.model;
public class Account 
{
    private String accountNumber;
    private String accountType;
    public Account(String accountNumber, String accountType) 
    {
        super();
        this.accountNumber = accountNumber;
        this.accountType = accountType;
    }
    public String getAccountType() 
    {
        return accountType;
    }
    public String getAccountNumber() 
    {
        return accountNumber;
    }
    @Override
    public String toString()
    {
        return "Account [accountNumber=" + accountNumber + ", accountType=" + accountType + "]";
    }
}

步骤11: 创建另一个名为 com.w3codebox.service.impl的包。

步骤12: 在此程序包中,创建一个名称为 AccountServiceImple的类。

在该类中,我们定义了帐户服务。

AccountServiceImpl. Java

package com.w3codebox.service.impl;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.springframework.stereotype.Service;
import com.w3codebox.model.Account;
@Service
public class AccountServiceImpl implements AccountService 
{
    // Memorizziamo dettagli dell'account in HashMap
    private static Map<String, Account> map = null;
    static
    {
        map = new HashMap<>();
        // Aggiungiamo dettagli dell'account nel map
        map.put("M4546779", new Account("10441117000", "Saving Account"));
        map.put("K2434567", new Account("10863554577", "Current Account"));
    }
    @Override
    public Account getAccountByCustomerId(String customerId) throws Exception
    {
    if (customerId == null)
    {
        throw new Exception("Invalid! Customer Id");
    }
    Account account = null;
    Set<Entry<String, Account>> entrySet = map.entrySet();
    for (Entry<String, Account> entry : entrySet) 
    {
        if (entry.getKey().equals(customerId))
        {
            account = entry.getValue();
        }
    }
    return account;
    }
}

Passo 13: Nella com.w3codebox.service.impl.Nella directory AccountService l'interfaccia.

AccountService.java

package com.w3codebox.service.impl;
import com.w3codebox.model.Account;
// Stiamo creando un'interfaccia, se non troviamo l'id del cliente viene lanciata un'eccezione
public interface AccountService 
{
    public abstract Account getAccountByCustomerId(String customerId) throws Exception;
}

Passaggio 14: Creare un nome del pacchetto com.w3codebox.aspect.

Passaggio 15: nel pacchetto com.w3codebox.aspect e creiamo un nome AccountAspect del tipo

Usiamo l'annotazione @AfterReturning. Abbiamo anche definito afterReturningAdvice()metodo.

Attenzione: Stiamo definito in name(account) > returning l'attributo deve corrispondere a metodo di consigliodeve corrispondere al nome del parametro.

AccountAspect.java

package com.w3codebox.aspect;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
import com.w3codebox.model.Account;
@Aspect
@Component
public class AccountAspect 
{
//Implementazione dell'avviso di ritorno   
@AfterReturning(value="execution(* com.w3codebox.service.impl.AccountServiceImpl.*(..))", returning="account")
public void afterReturningAdvice(JoinPoint joinPoint, Account account)
{
System.out.println("After Returing method:"+joinPoint.getSignature());
System.out.println(account);
}
}

Passaggio 16: Apri AopAfterReturningAdviceExampleApplication.java Aggiungere l'annotazione al file @EnableAspectJAutoProxy.

Supporto delle annotazioni per la gestione con AspectJ @Aspect Componente di annotazione. Viene utilizzato insieme all'annotazione @Configuration.

abbiamo utilizzato l'annotazione @EnableAspectJAutoProxy proxyTargetClass proprietà. Proprietà proxyTargetClass = true ci permette di usare CGLIB (libreria di generazione del codice) proxy, invece del metodo di proxy JDK basato su interfaccia predefinito.

ConfigurableApplicationContext È un'interfaccia che, oltre ai metodi client del contesto dell'applicazione di ApplicationContext, offre strumenti per configurare il contesto dell'applicazione.

AopAfterReturningAdviceExampleApplication.java

package com.w3codebox;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import com.w3codebox.model.Account;
import com.w3codebox.service.impl.AccountService;
import com.w3codebox.service.impl.AccountServiceImpl;
@SpringBootApplication
//@EnableSpectProxy注解支持处理用@Aspect注解标记的组件。它类似于xml配置中的标记。
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class AopAfterReturningAdviceExampleApplication
{
    public static void main(String[] args)  
    {
    ConfigurableApplicationContext ac = SpringApplication.run(AopAfterReturningAdviceExampleApplication.class, args);
    // Ottieni l'oggetto account dall'ambiente dell'applicazione
    AccountService accountService = ac.getBean("accountServiceImpl", AccountServiceImpl.class);
    Account account;
    try 
    {
        account = accountService.getAccountByCustomerId("K2434567");
        if (account != null)
            System.out.println(account.getAccountNumber() + "\t" + account.getAccountType());
        } 
        catch (Exception e) 
        {
            System.out.println(e.getMessage());
        }
    }
}

Dopo aver creato tutte le classi e i pacchetti, la directory del progetto è come segue:

Passaggio 17: Apri AopAfterReturningAdviceExampleApplication.java File e eseguirlo come applicazione Java. Visualizza l'output come segue:

Nella prossima sezione, dopo aver fatto delle proposte, capiremo.