English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
O aplicativo geralmente é desenvolvido em múltiplas camadas. Um aplicativo Java típico tem as seguintes camadas:
Camada Web: Usa REST ou aplicativo Web para exporServiço. Camada de negócios: Implementa a aplicação deLógica de negócios. Camada de dados: Implementa a aplicação delógica de persistência.
As responsabilidades de cada camada são diferentes, mas há alguns aspectos comuns aplicáveis a todas as camadas, como registro, segurança, validação, cache, etc.. Esses aspectos comuns são chamados de preocupações transversais.
Se implementarmos essas preocupações em cada camada, o código se tornará mais difícil de manter. Para superar esse problema, Programação Orientada a Aspectos(AOP) oferece uma solução para problemas transversais.
Toma a preocupação transversal como um aspecto. Define os pontos de entrada para indicar onde aplicar o aspecto.
Garante que as preocupações transversais sejam definidas em um componente de código coeso.
AOP (Aspecto-Programação Orientada a Objetos)É uma abordagem que permite Ponto de atenção transversalA separação aumenta o padrão de programação modular. Essas preocupações transversais diferem da lógica principal do negócio. Podemos adicionar outros comportamentos ao código existente sem modificar o código em si.
O framework AOP do Spring pode nos ajudar a implementar essas preocupações transversais.
Usando AOP, estamos em um lugar. Podemos definir livremente o modo e a localização de aplicação dessa funcionalidade, sem modificar a classe onde é adicionada uma nova funcionalidade. Agora, podemos modularizar o módulo de atenção transversal em classes especiais chamadas aspecto.
aspectos têm doisVantagens:
Primeiro, a lógica de cada ponto de atenção agora está concentrada em um único lugar, em vez de estar espalhada por todo o repositório de código. Em segundo lugar, o módulo de negócios contém apenas o código principal da atenção. A atenção secundária foi movida paraaspecto.
Cada aspecto tem responsabilidades a serem executadas, chamadas de AdvicePodemos implementar as funcionalidades do aspecto em um ou mais pontos de interseção no programa.
É implementado em Java puro. não requer processo de compilação especial. Ele suporta apenas pontos de interseção de execução de métodos. apenas fornecer a composição em tempo de execução. Existem dois tipos de proxies AOP: Proxy dinâmico JDKe proxy CGLIB.
Ponto de atenção transversal é o ponto de atenção que queremos implementar em várias partes da aplicação. Ele afeta toda a aplicação.
Aspect: O aspecto é um módulo que encapsulaadviceepointcutse fornecercross-cuttingExistem muitos aspectos. Podemos usar @Aspect classe comum com anotações para implementar aspectos. Pointcut: O ponto de interseção é uma expressão que escolhe um ou mais pontos de interseção para executar o Advice. Podemos usarexpressõesoupadrõesDefine o ponto de interseção. Ele usa diferentes tipos de expressões para coincidir com o ponto de interseção. No Spring Framework, é usado AspectJ linguagem de expressão de ponto de interseção. Join point: O ponto de interseção é o local onde a aplicação aplica lado AOPponto. Ou é uma instância específica de execução do Advice. Em AOP, o ponto de interseção pode serexecução do método, tratamento de exceções, alteração do valor das variáveis do objetoetc. Advice: Advice é o que chamamos debeforeouaftermedidas a serem tomadas. A ação é um trecho de código chamado durante a execução do programa. O framework Spring AOP possuicincodo tipo Advice: no Advice before, after, after-returning, após-throwing earound advice. É direcionado para um ponto de interseção específicoAdvice de ponto de interseção. Vamos discutir esses Advice mais à frente neste capítulo. Target object: Um objeto aplicado com Advice é chamado detarget objectO objeto alvo sempre éproxiedIsso significa que, durante a execução, será criado um subclasse que cobre o método alvo e incluirá Advice. Tecelagem: Este é o processo de conectar os aspectos com outros tipos de aplicativos.ligar aspectosPodemostempo de carregamento, processos de tempo de execução.eCompilaçãotecendo.
Proxy: É o objeto criado após aplicar o Advice ao objeto alvo, chamado de proxy . O Spring AOP implementou Proxy dinâmico JDK, para usar a criação de classes proxy e Advice de classes alvo. Essas são chamadas de classes proxy AOP.
A diferença entre AOP e OOP é a seguinte:
AOP | OOP |
Aspect: Um código unido de pointcut, Advice e propriedades. | Classe: Um código unido de métodos e propriedades. |
Pointcut: Define um conjunto de pontos de entrada para a execução do Advice. | Assinatura do método: . Define o ponto de entrada para a execução do corpo do método. |
Advice: Esta é a implementação de preocupações transversais. | Corpos de métodos: É a implementação de problemas de lógica de negócios. |
Waver: Constrói código (fonte ou objeto) com base no Advice. | Compilador: Transforma código-fonte em código-alvo. |
A diferença entre AOP e OOP é a seguinte:
Spring AOP | AspectJ |
Precisa de um processo de compilação separado. | Precisa do compilador AspectJ. |
Suporta apenas os pontos de entrada de execução de método. | Suporta todos os pontos de entrada. |
Pode ser implementado em beans gerenciados pelo container Spring. | Pode ser implementado em todos os objetos de domínio. |
Suporta apenas a tecelagem de nível de método. | Pode flutuar em campos, métodos, construtores, inicializadores estáticos, classes finais, etc. |
AOP Advice tem cinco tipos, conforme mostrado a seguir:
Before Advice After Advice Around Advice Após Lançar Após Retornar
Before Advice: Advice executada antes do ponto de ligação é chamada antes da notificação. Usamos @Before Anotação marca o Advice como Before notificação.
After Advice: Advice executada após o ponto de ligação é chamada de after notification. Usamos @After Anotação marca o Advice como After notificação.
Around Advice: Advice executada antes e após o ponto de ligação é
Após Lançar: Advice executada ao lançar exceção no ponto de ligação.
After Returning: Advice executada quando o método é executado com sucesso.
Antes de implementar AOP no aplicativo, precisamos adicionar no arquivo pom.xml Spring AOP Dependências
O Spring Boot Starter AOP é o dependência que fornece o Spring AOP e o AspectJ. O AOP fornece funcionalidades básicas de AOP, enquanto o AspectJ fornece um framework completo de AOP.
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> <version>2.2.2.RELEASE</version> </dependency>
Na próxima seção, vamos implementar diferentes Advice no aplicativo.