Aop Aspect J 1.5.4 Capitulo 02

1.492 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.492
No SlideShare
0
A partir de incorporações
0
Número de incorporações
471
Ações
Compartilhamentos
0
Downloads
28
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aop Aspect J 1.5.4 Capitulo 02

  1. 1. AOP – AspectJ 1.5.4 Programação Orientada a Aspectos
  2. 2. 2 Pointcuts
  3. 3. Objetivos <ul><li>Saber utilizar pointcuts com call e execution </li></ul><ul><li>Saber utilizar anotações para aspectos </li></ul><ul><li>Saber realizar expressões pointcuts considerando anotações </li></ul><ul><li>Saber declarar warnings e erros </li></ul><ul><li>Saber realizar injeção de anotações </li></ul>
  4. 4. Pointcuts <ul><li>Join points (11): </li></ul><ul><ul><li>Chamada de método </li></ul></ul><ul><ul><li>Execução de método </li></ul></ul><ul><ul><li>Chamada de construtor </li></ul></ul><ul><ul><li>Execução de construtor </li></ul></ul><ul><ul><li>Getter de uma propriedade </li></ul></ul><ul><ul><li>Setter de uma propriedade </li></ul></ul><ul><ul><li>Pré-inicialização </li></ul></ul><ul><ul><li>Inicialização </li></ul></ul><ul><ul><li>Inicialização estática </li></ul></ul><ul><ul><li>Handler </li></ul></ul><ul><ul><li>Advice de execução de join points </li></ul></ul>
  5. 5. Pointcuts <ul><li>Sintaxe </li></ul><ul><ul><li>pointcut <<nome>>(): << expressao >; </li></ul></ul>package br.com.targettrust.aop.pointcuts; public aspect PointcutSample { pointcut nomePointcut(): call ( void metodoX()); }
  6. 6. Pointcuts 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() ); } <ul><li>Operadores Lógicos </li></ul><ul><ul><li>&& </li></ul></ul><ul><ul><li>|| </li></ul></ul><ul><ul><li>! </li></ul></ul>
  7. 7. Pointcuts <ul><li>call vs execution </li></ul><ul><ul><li>execution: </li></ul></ul><ul><ul><ul><li>Trecho de código em execução </li></ul></ul></ul><ul><ul><ul><li>Recursão </li></ul></ul></ul><ul><ul><li>call </li></ul></ul><ul><ul><ul><li>Assinatura específica </li></ul></ul></ul><ul><ul><ul><li>Chamadas do pai( apenas estática) </li></ul></ul></ul><ul><ul><ul><li>Usa-se withincode() </li></ul></ul></ul>
  8. 8. Suporte ao Java 5 <ul><li>Suporte total: </li></ul><ul><ul><li>varargs </li></ul></ul><ul><ul><li>enums </li></ul></ul><ul><ul><li>annotations </li></ul></ul><ul><ul><li>co-variant </li></ul></ul><ul><ul><li>generics </li></ul></ul><ul><ul><li>boxing </li></ul></ul>
  9. 9. Anotações para Pointcuts <ul><li>Politica de retenção </li></ul><ul><ul><li>Código Fonte </li></ul></ul><ul><ul><ul><li>São lidas no processo de compilação, mas não são colocadas no class gerado. </li></ul></ul></ul><ul><ul><li>Class gerado </li></ul></ul><ul><ul><ul><li>É a politica de retenção padrão, as informações estão tanto em tempo de compilação quanto no class gerado. </li></ul></ul></ul><ul><ul><li>Runtime </li></ul></ul><ul><ul><ul><li>São lidas pelo compilador, vão para o class gerado e ainda podem ser obtidas em tempo de runtime. </li></ul></ul></ul>
  10. 10. Join 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
  11. 11. Join 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.
  12. 12. Recursos avançados em pointcuts <ul><li>args/@args </li></ul><ul><li>this/@this </li></ul><ul><li>target/@target </li></ul><ul><li>within/@within </li></ul><ul><li>withincode/@withincode </li></ul><ul><li>annotation/@annotation </li></ul>
  13. 13. Declaração de warnings declare warning : within (br.com.targettrust.aop.*) && call (* faz*(..)) : &quot;Você não deve chamar métodos com o prefixo faz*&quot; ;
  14. 14. Declaração de errors declare error : within (br.com.targettrust.aop.*) && call (* deleteAll*(..)) : &quot;Você não deve deletar tudo tche!!!&quot; ;
  15. 15. Injeção de anotações <ul><li>Podemos injetar em: </li></ul><ul><ul><li>Classes </li></ul></ul><ul><ul><li>Métodos </li></ul></ul><ul><ul><li>Construtores </li></ul></ul><ul><ul><li>Atributos </li></ul></ul>
  16. 16. Injeção de anotações <ul><li>Anotações AspectJ: </li></ul><ul><ul><li>@type </li></ul></ul><ul><ul><li>@method </li></ul></ul><ul><ul><li>@constructor </li></ul></ul><ul><ul><li>@field </li></ul></ul>
  17. 17. Injeçã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 ; }
  18. 18. Você aprendeu a... <ul><li>Utilizar pointcuts com call e execution </li></ul><ul><li>Utilizar anotações para aspectos </li></ul><ul><li>Realizar expressões pointcut considerando anotações </li></ul><ul><li>Declarar warnings e errors </li></ul><ul><li>Realizar injeção de anotações </li></ul>
  19. 19. Exercícios <ul><li>1) Faça um aspecto que intercepte toda criação de objetos que o construtor receba uma String. </li></ul><ul><li>2) Faça um aspecto que intercepte toda execução de métodos que recebam um Map como argumento. </li></ul><ul><li>3) Faça um aspecto que declare errors se o desenvolvedor instanciar algum objeto do tipo ArrayList. </li></ul><ul><li>4) Faça um aspecto que injete anotações em objetos de pacotes DAO. </li></ul><ul><li>5) Faça um aspecto que intercepte todas os getters que tenha a anotação @Serializavel no target. </li></ul>

×