Registrando com Spring Boot AOP

Índice

introduzir

1.1 O que é POA

1.2 Sistema e conceito AOP

Implementação simples de AOP

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

2.7 Execute o teste novamente

 Resumir


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:

31a4a7bec4ed3150224d48c74fd0f2bc.png

 

        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:

70f0688aa25cdbe8586e9cf3e665edf1.png

 

        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:

239887065c6ce41b2abbed9e9b05901a.png

 

      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:

b2d561096aca93133f405e98db521bf7.png

 

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 ~

Acho que você gosta

Origin blog.csdn.net/qq_51294997/article/details/132003391
Recomendado
Clasificación