Índice
2.1 Crie um novo projeto SpringBoot sem selecionar dependências
2.2 Após definir a configuração local do Maven, adicione as dependências do maven no arquivo pom.xml
2.3 Criar uma interface de classe de negócios
2.4 Implementar a interface de negócios na classe de entidade
2.5 Executando resultados em testes de unidade
2.6 Criar uma classe de aspecto
introduzir
1.1 O que é POA
AOP (Programação Orientada a Aspectos), orientada ao pensamento de aspectos, é uma das três ideias centrais do Spring (dois e dois: IOC-inversão de controle, injeção de dependência DI).
Então, por que o AOP é tão importante?
Em nossos programas, geralmente existem alguns requisitos sistemáticos, como verificação de permissão, registro, estatísticas etc. Esses códigos serão dispersos e intercalados em várias lógicas de negócios, como o seguinte diagrama esquemático:
Obviamente, é inaceitável escrever tantos códigos de log de soma de verificação duplicados quantas forem as operações de negócios. Claro, usando o pensamento orientado a objetos, podemos extrair esses códigos repetidos e escrevê-los como métodos públicos, que é o seguinte:
Dessa forma, os problemas de redundância de código e manutenção são resolvidos, mas ainda é um pouco complicado chamar manualmente esses métodos públicos alternadamente em cada método de negócios. Existe uma maneira melhor? Sim, para resolver esse problema, surgiu a programação orientada a aspectos (AOP). O AOP extrai completamente códigos não comerciais, como verificação de permissão e registros de log, separa-os dos códigos comerciais e localiza nós para cortar em códigos comerciais:
O AOP realiza a manutenção unificada das funções do programa por meio da pré-compilação e da execução de agentes dinâmicos. O AOP é uma continuação do OOP. É um ponto importante no desenvolvimento de software e um conteúdo importante no framework Spring. É um derivado da programação funcional. O AOP pode ser usado para isolar várias partes da lógica de negócios, permitindo que os desenvolvedores se concentrem no negócio principal ao escrever a lógica de negócios, reduzindo assim o acoplamento entre os módulos de lógica de negócios e melhorando a reutilização do código e a eficiência do desenvolvimento.
AOP usa um mecanismo de extração horizontal para substituir a construção de código repetido do sistema de integração vertical. Usando o Aspect, a lógica de negócios se concentra apenas no próprio negócio, e códigos como gerenciamento de log, processamento de transações, estatísticas de desempenho, tratamento de exceções e controle de acesso são separados do código da lógica de negócios, para que o código da lógica de negócios não seja afetado quando esses comportamentos são alterados.
1.2 Sistema e conceito AOP
Spring AOP e AspectJ
Os frameworks AOP atualmente populares são Spring AOP e AspectJ.
Termos relacionados ao AOP
Simplesmente entenda, de fato, AOP tem que fazer três tipos de coisas:
-
Onde cortar, ou seja, em quais códigos comerciais são operações não comerciais, como verificação de permissão executada.
-
Quando cortar, é antes ou depois da execução do código de negócio.
-
O que fazer após o login, como verificação de permissão, login, etc.
Portanto, o sistema AOP pode ser classificado como a figura a seguir:
Implementação simples de AOP
Vamos demonstrar a aplicação primária do AOP através de um caso simples:
2.1 Crie um novo projeto SpringBoot sem selecionar dependências
2.2 Após definir a configuração local do Maven, adicione as dependências do maven no arquivo pom.xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
2.3 Criar uma interface de classe de negócios
Conforme mostrado na figura, estabeleça o pacote de software e a interface correspondentes e crie um método na interface:
2.4 Implementar a interface de negócios na classe de entidade
Observe que você deve adicionar a anotação Service
2.5 Executando resultados em testes de unidade
2.6 Criar uma classe de aspecto
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.StringJoiner;
@Component
@Aspect
public class LogAspect {
@Before("execution(* com.example.aopdemo.service..*.*(..))")
public void sysLog(JoinPoint jp){
StringJoiner log = new StringJoiner("|","{","}");
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyy-MM-dd HH:mm:ss");
log.add(formatter.format(LocalDateTime.now()));
//当前执行的业务方法名称
String methodName = jp.getSignature().getName();
log.add(methodName);
//方法的参数
Object[] args = jp.getArgs();
for(Object arg:args){
log.add(arg == null ? "-" : arg.toString() );
}
System.out.println("AOP日志启动!" + log);
}
2.7 Execute o teste novamente
Execute-o novamente e descubra que nosso log foi adicionado e o código original não foi alterado. Essa é a sedosidade do AOP.
Resumir
AOP usa um mecanismo de extração horizontal para substituir a construção de código repetida do sistema de integração vertical. Usando o Aspect, a lógica de negócios se concentra apenas no próprio negócio, e códigos como gerenciamento de log, processamento de transações, estatísticas de desempenho, tratamento de exceções e controle de acesso são separados do código da lógica de negócios, para que o código da lógica de negócios não seja afetado quando esses comportamentos são alterados. É um artefato necessário para o desenvolvimento. Este é o fim deste artigo. Espero que todos possam ganhar algo ~