Download - Aop Aspect J 1.5.4 Capitulo 02
![Page 1: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/1.jpg)
AOP – AspectJ 1.5.4Programação Orientada a
Aspectos
![Page 2: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/2.jpg)
22PointcutsPointcuts
![Page 3: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/3.jpg)
ObjetivosObjetivos
Saber utilizar pointcuts com call e execution
Saber utilizar anotações para aspectosSaber realizar expressões pointcuts
considerando anotaçõesSaber declarar warnings e errosSaber realizar injeção de anotações
![Page 4: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/4.jpg)
PointcutsPointcuts
Join points (11):Chamada de métodoExecução de métodoChamada de construtorExecução de construtorGetter de uma propriedadeSetter de uma propriedadePré-inicializaçãoInicializaçãoInicialização estáticaHandlerAdvice de execução de join points
![Page 5: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/5.jpg)
PointcutsPointcuts
Sintaxe pointcut <<nome>>(): <<expressao>;
package br.com.targettrust.aop.pointcuts;public aspect PointcutSample { pointcut nomePointcut(): call (void metodoX());}
![Page 6: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/6.jpg)
PointcutsPointcuts
package br.com.targettrust.aop.pointcuts;public aspect PointcutLogicalOperators {
pointcut operadorAnd(): call ( String br.com.targettrust.aop.java.domain.model.Pessoa.getNome() )
&& call ( String br.com.targettrust.aop.java.domain.model.PessoaFisica.getNome() ); pointcut operadorOr(): call ( String br.com.targettrust.aop.java.domain.model.Pessoa.getNome() )
|| call ( String
br.com.targettrust.aop.java.domain.model.Pessoa.getEndereco() );
pointcut operadorNot(): call ( ! String br.com.targettrust.aop.java.domain.model.Pessoa.getNome() );
}
• Operadores Lógicos– &&– ||– !
![Page 7: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/7.jpg)
PointcutsPointcuts
• call vs execution• execution:
• Trecho de código em execução• Recursão
• call• Assinatura específica• Chamadas do pai( apenas
estática)• Usa-se withincode()
![Page 8: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/8.jpg)
Suporte ao Java 5Suporte ao Java 5
• Suporte total:• varargs• enums• annotations• co-variant• generics• boxing
![Page 9: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/9.jpg)
Anotações para PointcutsAnotações para Pointcuts
Politica de retençãoCódigo Fonte
São lidas no processo de compilação, mas não são colocadas no class gerado.
Class gerado É a politica de retenção padrão, as informações estão tanto
em tempo de compilação quanto no class gerado.
Runtime São lidas pelo compilador, vão para o class gerado e ainda
podem ser obtidas em tempo de runtime.
![Page 10: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/10.jpg)
Join point match com anotaçõesJoin point match com anotações
Expressão Exemplo de uso
(@Executavel * *) Contém a anotação @Executavel
(!@Executavel * *) Não contém a anotação @Executavel
(@Executavel @Runnable * * ) Que contém as anotações @Executavel e @Runnable
( @(Executavel || Runnable) * *)
Que contém a anotação @Executavel ou a anotação @Runnable
@(br.targettrust..*) Qualquer anotação que esteja no pacote ou subpacote br.targettrust
![Page 11: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/11.jpg)
Join point match com anotaçõesJoin point match com anotações
Expressão Exemplo de uso
@Criavel new(..) Qualquer construtor que tenha a anotação @Criavel
!@Criavel new(..) Qualquer construtor que não tenha a anotação @Criavel. Cuidado com a interceptação de aspectos.
@Criavel new(java.util.List) Qualquer construtor que receba um parâmetro do tipo List.
@Criavel private new(..) Qualquer construtor privado que possua a anotação @Criavel.
![Page 12: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/12.jpg)
Recursos avançados em pointcutsRecursos avançados em pointcuts
• args/@args• this/@this• target/@target• within/@within• withincode/@withincode• annotation/@annotation
![Page 13: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/13.jpg)
Declaração de warningsDeclaração de warnings
declare warning : within(br.com.targettrust.aop.*) && call(* faz*(..)) : "Você não deve chamar métodos com o prefixo faz*";
![Page 14: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/14.jpg)
Declaração de errorsDeclaração de errors
declare error : within(br.com.targettrust.aop.*) && call(* deleteAll*(..)) : "Você não deve deletar tudo tche!!!";
![Page 15: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/15.jpg)
Injeção de anotaçõesInjeção de anotações
• Podemos injetar em:• Classes• Métodos• Construtores• Atributos
![Page 16: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/16.jpg)
Injeção de anotaçõesInjeção de anotações
• Anotações AspectJ:• @type
• @method
• @constructor
• @field
![Page 17: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/17.jpg)
Injeção de anotaçõesInjeção de anotações
public aspect JoinPointMacthWithAnnotationDeclareAnn {
declare @type : br.com.targettrust.aop..* : @Exportavel;
declare @field : br.com.targettrust.aop..* : @Campo;
declare @method : public * br.com.targettrust.aop.DeclareAnnTest4.*(..) :@Metodo;
declare @constructor : br.com.targettrust.aop.DeclareAnnTest3+.new(..) : @Novo;}
![Page 18: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/18.jpg)
Você aprendeu a...Você aprendeu a...
Utilizar pointcuts com call e executionUtilizar anotações para aspectosRealizar expressões pointcut
considerando anotaçõesDeclarar warnings e errorsRealizar injeção de anotações
![Page 19: Aop Aspect J 1.5.4 Capitulo 02](https://reader035.vdocuments.pub/reader035/viewer/2022062303/55626e94d8b42aab1a8b5205/html5/thumbnails/19.jpg)
ExercíciosExercícios
1) Faça um aspecto que intercepte toda criação de objetos que o construtor receba uma String.
2) Faça um aspecto que intercepte toda execução de métodos que recebam um Map como argumento.
3) Faça um aspecto que declare errors se o desenvolvedor instanciar algum objeto do tipo ArrayList.
4) Faça um aspecto que injete anotações em objetos de pacotes DAO.
5) Faça um aspecto que intercepte todas os getters que tenha a anotação @Serializavel no target.