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

SpringBoot AOP @AfterReturning

After returningé uma sugestão do Spring AOP, chamada geralmente após a execução completa (execução) do ponto de interrupção. Se uma exceção for gerada, não será chamada. Podemos usar @AfterReturning Comentários após a implementação da sugestão de retorno na aplicação. As anotações marcam a funcionalidade para ser executada antes do método coberto pelo PointCut.

Após a sugestão de retorno, quando o método correspondente executar o valor de retorno normal, será executada a sugestão. O nome definido no atributo return deve corresponder ao nome do parâmetro no método advice. Quando o método retornar um valor, esse valor será transmitido como o valor do parâmetro correspondente ao método de notificação.

Vamos implementar a notificação após o retorno na aplicação.

SpringBoot AOP @AfterReturning

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

Passos2: fornecer Group Nome. Nós fornecemos o nome do grupo com.w3codebox.

Passos3: fornecido Artifact Id.fornece Artifact Id aop-depois-devolvendo-conselhos-exemplo.

Passos4: adicionar Spring Web dependências.

Passos5: clique GerarBotão. Quando clicamos no botão "Gerar", ele encapsula todas as normas jar do arquivo e baixá-lo para o sistema local.

Passos6: Extrair

第7Passo: Use os seguintes passos para importarpasta:

arquivo->Importar->Projeto Maven existente->Próximo->Navegar na pasta aop-devolvendo-conselhos-example exemplo->Concluído.

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

<dependência>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-início-aop</> artifactId>
</<dependency
</<dependencies
pom.xml
<?xml versão="1.0" codificação="UTF-8"?>
<projeto xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instância
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<versão.do.modelo>4.0.0</versão.do.modelo>
<grupo.id>com.w3codebox</<groupId>
<id.artefato>aop-depois-devolvendo-conselhos-exemplo</> artifactId>
<versão>0.0.1-SNAPSHOT</versão>
<empacotamento>jar</empacotamento>
<nome>aop-depois-devolvendo-conselhos-exemplo</nome>
<descrição>Projeto de exemplo para Spring Boot</descrição>
<pai>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-início-pai>/> artifactId>
<versão>2.2.2.LANÇAMENTO</versão>
<caminho.relativo>/> <!-- procurar o pai no repositório -->
</pai>
<propriedades>
<codificação.de.fonte.de.construção.do.projeto>UTF-8</codificação.de.fonte.de.construção.do.projeto>
<codificação.de.saida.de.relatório.do.projeto>UTF-8</codificação.de.saida.de.relatório.do.projeto>
<versão.java>1.8</versão.java>
</propriedades>
<dependências>
<dependência>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-início-aop</> artifactId>
</<dependency
<dependência>
<groupId>org.springframework.boot</<groupId>
<artifactId>spring-boot-início-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>

Passos9: src/main/java pasta Crie um nome de com.w3codebox.model no codebox.model.

Passos10: no pacote com.w3Crie um pacote chamado Account da classe.

No "Account" classe, execute as seguintes operações:

definiram duas variáveis do tipo String accountNumber e accountType . Clique com o botão direito no arquivo-> Fonte-> Usar campos para gerar construtor > Gerar Getters.
Clique com o botão direito no arquivo-> Fonte-> Gerar Getters e Setters-> Selecionar Getters-> Gerar
Gerar toString()
Clique com o botão direito no arquivo-> Fonte-> Gerar 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 \ + accountNumber+ ", accountType=" + accountType + "]";
    }
}

Passos11: Crie outro chamado com.w3Pacote de codebox.service.impl.

Passos12: 在此程序包中,创建一个名称为 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 
{
    //在 HashMap 中存储帐户细节
    private static Map<String,Account> map = null;
    static
    {
        map = new HashMap<>();
        //在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;
    }
}

Passos13: com.w3codebox.service.impl。包中创建名称为 AccountService 的接口。

AccountService.java

package com.w3codebox.service.impl;
import com.w3codebox.model.Account;
//正在创建一个接口,如果找不到客户id则引发异常
public interface AccountService 
{
    public abstract Account getAccountByCustomerId(String customerId) throws Exception;
}

Passos14: Criar um nome com.w3do pacote codebox.aspect.

Passos15: no pacote com.w3codebox.aspect para criar um nome AccountAspect da classe.

Neste classe, usamos a anotação @AfterReturning。 Nós também definimos afterReturningAdvice()método.

Atenção: Nós também definido no nome(account) > returning as propriedades devem coincidir com método de aconselhamentoque correspondem aos nomes dos parâmetros.

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 
{
//implementando aconselhamento após o retorno   
@AfterReturning(value="execution("* com.w3codebox.service.impl.AccountServiceImpl.*(..))", returning="account")
public void afterReturningAdvice(JoinPoint joinPoint, Account account)
{
System.out.println("After Returning method:")+joinPoint.getSignature());
System.out.println(account);
}
}

Passos16: Abrir AopAfterReturningAdviceExampleApplication.java Adicionar anotação ao arquivo @EnableAspectJAutoProxy。

Suporte de anotação para o processamento com AspectJ @Aspect anotação de componentes. Ela é usada em conjunto com a anotação @Configuration.

usamos a anotação @EnableAspectJAutoProxy proxyTargetClass propriedade. Propriedade proxyTargetClass = true permite-nos usar CGLIB (biblioteca de geração de código) proxy, em vez do método de proxy JDK baseado em interface padrão.

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

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 anotação suporta o processamento de componentes marcados com @Aspect. Ela é semelhante ao sinalizador em configurações xml.
@EnableAspectJAutoProxy(proxyTargetClass=true)
public class AopAfterReturningAdviceExampleApplication
{
    public static void main(String[] args)  
    {
    ConfigurableApplicationContext ac = SpringApplication.run(AopAfterReturningAdviceExampleApplication.class, args);
    //Obter o objeto account a partir do contexto do aplicativo
    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());
        }
    }
}

Após criar todas as classes e pacotes, a estrutura do diretório do projeto será como follows:

Passos17: Abrir AopAfterReturningAdviceExampleApplication.java Arquivo e execute-o como um aplicativo Java. Ele exibe a saída conforme mostrado:

Na próxima seção, após fazer a sugestão, vamos entender.