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