Aop Aspect J 1.5.4 Capitulo 03

1.260 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.260
No SlideShare
0
A partir de incorporações
0
Número de incorporações
460
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Aop Aspect J 1.5.4 Capitulo 03

  1. 1. AOP – AspectJ 1.5.4 Programação Orientada a Aspectos
  2. 2. 33 AdviceAdvice
  3. 3. ObjetivosObjetivos Saber utilizar os tipos de Advices do AspectJ Conhecer recursos de ThisJoinPoint Saber criar aspectos Saber utilizar inner-type declarations
  4. 4. AdvicesAdvices Pointcuts para advices Tipos: Before Around After  Throwing  Returning
  5. 5. AdvicesAdvices before(): call(* *.*save(Object)) { System.out.println("Simples execucao" + " antes do metodo."); }
  6. 6. AdvicesAdvices after(): call(* *.*save(Object)){ System.out.println("Simples execucao" + "depois do" + "metodo."); }
  7. 7. AdvicesAdvices after() returning(Object o): call(public Object *.*.find()){ String x = (String)o; x += "123"; System.out.println("retorno: " + x); }
  8. 8. AdvicesAdvices after() throwing(Exception e): call(public void *.*.delete()){ System.out.println("Erro! " + Mensagem: " + e.getMessage()); }
  9. 9. AdvicesAdvices int around(int x,int y): call(public int *.*.soma2(int,int)) && args(x,y){ System.out.println("Around advice" + + "modificando valores dinamicos"); return proceed(x,y); }
  10. 10. ThisJoinPointThisJoinPoint • Variável de referência especial • Utilizável no contexto do advice • org.aspectj.lang.JoinPoint • Informações do contexto AOP • Acesso a argumentos e objetos
  11. 11. ThisJoinPointThisJoinPoint Método Descrição getArgs() Retorna os argumentos do método getSignature() Retorna a assinatura do método getSourceLocation() Fonte e linha do código Java getClass() Retorna a classe de implementação do JoinPoint getKind() Tipo de join point. Ex.: method-call getTarget() Retorna o objeto(Java) em execução getStaticPart() É um helper do join point que contém as informações que podem ser acessadas de forma estática. getThis() Semelhante ao target, porém sempre irá retornar o objeto que estiver relacionado ao this() de expressão pointcut.
  12. 12. AspectsAspects • Semelhante a classe Java • Forma de solução Crosscuting Concern • Pointcuts, Advices • Suporta herança (Abstrato) • Variáveis e métodos Java • Aspectos alinhados (estatico) • Não são instanciados diretamente
  13. 13. AspectsAspects • Pode ter construtor • Sem argumentos • Sem levantar Exceptions checadas • Singletons • Recuperar instância • org.aspectj.lang.Aspects • aspectOf(Class c)
  14. 14. Inner-type DeclarationsInner-type Declarations • Adicionar membros de forma dinâmica • classe pai • set de interfaces • métodos • anotações
  15. 15. Inner-type DeclarationsInner-type Declarations declare parents: br.com.B extends br.com.A; declare parents: br.com.B implements br.com.A; private List<Porta> Casa.portas = new ArrayList<Porta>(); public void Casa.pintar(Cor c){ System.out.println("Pintando a casa de cor:" + c); } public Casa.new(String rua) { super(); System.out.println(rua); }
  16. 16. Você aprendeu a...Você aprendeu a... Utilizar os tipos de Advices do AspectJ Recursos de ThisJoinPoint Criar aspectos Utilizar inner-type declarations
  17. 17. ExercíciosExercícios 1) Faça um Aspecto e utilizando o advice do tipo before() log em um arquivo texto todas as chamadas de métodos da classe Sistema. Essa classe deve ter 5 metodos: ligar(), parar(), desligar(), acelerar(), e explodir(), crie a classe e forneça qualquer implementação, após isto chame algumas vezes estes métodos. 2) Aproveite o exercicio 1 e mude o advice before para o advice after e faça o método desligar(String motivo) e log isso também. 3) Faça um advice around que não execute o método ligar se o dia de hoje for par e além disso levante uma exception do tipo RuntimeExecption(“Hoje o sistema está desligado!”). 4) Crie a interface Contador com o método int contar(int i) e int showTotalCount(). Faça via inner-type declaration que a classe sistema tenha um contador com todas as chamadas aos métodos acelerar() e parar(). Mostre o resultado em uma classe main, use cast ou reflection.

×