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

SpringBoot AOP @Around

Conselho Around por @Around Anotação de representação. Ela executa antes e após o ponto de conexão. Este é o mais poderoso sugestão. Também oferece mais controle ao usuário final, permitindo que eles manipulem ProceedingJoinPoint.

Vamos implementar sugestões ao redor da aplicação.

Exemplo Spring Boot @Around

Passos1: Abra o Spring Initializr http://start.spring.io .

Passos2: Fornecido GrupoNome. Fornecemos o nome do grupo com.w3codebox.

Passos3: Fornecido Artifact Id.Forneça Artifact Id aop-around-advice-example.

Passos4: Adicionar Spring Web Dependências.

Passos5: Clique GerarBotão. Quando clicamos no botão "Gerar", ele empacota todas as especificações dentro de jar arquivo e baixe-o no sistema local.

O6Passo: ExtrairArquivo jar baixado.

Passos7: Use os seguintes passos para importarPasta:

Arquivo->Importar->Projeto Maven existente->Próximo->Navegue na pasta aop-around-advice-example ->Concluído.

Passos8: Abrir pom.xml Arquivo e adicione o seguinte AOP Dependências. É usado Spring AOP e AspectJ Início da programação orientada a aspectos.

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.w3codebox</groupId>
<artifactId>aop-around-advice-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>aop-around-advice-example</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<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>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

Passos9: 创建名称为 com.w3codebox.service的包。

Passos10: Crie um pacote chamado BankService 的类。

Nesta classe, definimos um método chamado}} método displayBalance(). Verifica o número da conta. Se o número da conta correspondente, retorna o valor total, caso contrário, retorna uma mensagem.

BankService.java

package com.w3codebox.service;
import org.springframework.stereotype.Service;
@Service
public class BankService 
{
public void displayBalance(String accNum) 
{
System.out.println("Inside displayBalance() method");
if(accNum.equals("12345")) 
{
System.out.println("Total balance:") 10,000);
}
else 
{
System.out.println("Sorry! wrong account number.");
}
}
}

Passos11: Crie outro pacote chamado com.w3codebox.aspect.

Passos12: Crie um pacote chamado Classe BankAspect.

Nas classes a seguir, definimos dois métodos chamados logDisplayingBalance()e aroundAdvice()método.

BankAspect.java

package com.w3codebox.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
//Ativar a funcionalidade AOP do Spring na aplicação
@Aspect
@Component
public class BankAspect
{
    //Mostrar todos os métodos disponíveis, notificar chamadas de todos os métodos
    @Pointcut(value= "execution(* com.w3codebox.service.BankService.*(..))
    private void logDisplayingBalance() 
    { 
    }
    //declara notificações around aplicadas antes e após a correspondência da expressão de ponto de entrada do método
    @Around(value= "logDisplayingBalance()")
    public void aroundAdvice(ProceedingJoinPoint jp) throws Throwable 
    {
        System.out.println("Método chamado antes do aroundAdvice()") + jp.getSignature().getName() + " method ");
        try 
        {
            jp.proceed();
        } 
        finally 
        {
        }
        System.out.println("Método chamado após o aroundAdvice()") + jp.getSignature().getName() + " method ");
    }
}

Passos13: Abrir AopAroundAdviceExampleApplication.java arquivo e adicione anotações @EnableAspectJAutoProxy。

Esta anotação habilita o suporte para o processamento de componentes marcados com AspectJ @Aspect componentes anotados. Ele é usado juntamente com a anotação @Configuration.

ConfigurableApplicationContext é uma interface, além dos métodos do cliente do contexto de aplicação do ApplicationContext, também oferece ferramentas para configurar o contexto da aplicação.

AopAroundAdviceExampleApplication.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.service.BankService;
@SpringBootApplication
//@EnableAspectJAutoProxy 注解支持处理标记为 @Aspect 的组件。它类似于 xml 配置中的标记。
@EnableAspectJAutoProxy
public class AopAroundAdviceExampleApplication 
{
    public static void main(String[] args) 
    {
    ConfigurableApplicationContext context = SpringApplication.run(AopAroundAdviceExampleApplication.class, args);
    //Obter o objeto employee do contexto da aplicação.
    BankService bank = context.getBean(BankService.class);
    //Exibir saldo da conta
    String accnumber = "12345";
    bank.displayBalance(accnumber);
    //Fechar o objeto context
    context.close();
    }
}

Após a criação de todos os pacotes e classes, a estrutura do diretório do projeto será como segue:

Agora, execute a aplicação.

Passos14: Abrir AopAroundAdviceExampleApplication.java E executar a aplicação Java.

No output acima, vimos que o método aroundAdvice() foi chamado duas vezes. Primeiro, na execução displayBalance()Antes do método, em seguida, na execução displayBalance()Depois do método. Chamado de consultoria.