aop aspect j 1.5.4 capitulo 04

17
AOP – AspectJ 1.5.4 Programação Orientada a Aspectos

Upload: diego-pacheco

Post on 25-May-2015

1.379 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Aop Aspect J 1.5.4 Capitulo 04

AOP – AspectJ 1.5.4Programação Orientada a

Aspectos

Page 2: Aop Aspect J 1.5.4 Capitulo 04

44Recursos AdicionaisRecursos Adicionais

Page 3: Aop Aspect J 1.5.4 Capitulo 04

ObjetivosObjetivos

Saber utilizar AspectJ com annotations.Saber utilizar o recurso de declare

soft.Conhecer o conceito DBC.

Page 4: Aop Aspect J 1.5.4 Capitulo 04

AspectJ com annotationsAspectJ com annotations

Conjunto de anotações AspectJ@Aspect@Pointcut@Before@After@AfterReturning@AfterThrowing@Around

Page 5: Aop Aspect J 1.5.4 Capitulo 04

AspectJ com annotationsAspectJ com annotations

Mais limitadoNão podemos declarar

Aspectos PrivilegiadosImports não surtem efeito

Use nome completo. EX: java.util.List

Page 6: Aop Aspect J 1.5.4 Capitulo 04

AspectJ com annotationsAspectJ com annotations

@Pointcut("call(* *.*(int)) && args(i) && if()")public static boolean chamadaIf(int i) { return i > 0;}

@AfterReturning("criticalOperation()")public void phew() { System.out.println("phew");}

@AfterReturning(pointcut="call(Foo+.new(..))",returning="f")public void itsAFoo(Foo f) { System.out.println("It's a Foo: " + f);}

Page 7: Aop Aspect J 1.5.4 Capitulo 04

AspectJ com annotationsAspectJ com annotations

• Around• Problema do proceed()

• Solução– Interface AspectJ

– org.aspectj.lang.ProceedingJoinPoint

Page 8: Aop Aspect J 1.5.4 Capitulo 04

AspectJ com annotationsAspectJ com annotations

@Around("call(* *.*.now(..))")public String getData(ProceedingJoinPoint pjp){ try { System.out.println(pjp.getSignature());

return (String)pjp.proceed(); }catch (Throwable e) { return null; }}

Page 9: Aop Aspect J 1.5.4 Capitulo 04

Inner-type DeclarationsInner-type Declarations

• Mais limitado• Não adiciona

• Atributos• Construtores

• Pode-se adicionar interfaces• Pode-se adicionar classe pai

Page 10: Aop Aspect J 1.5.4 Capitulo 04

Inner-type DeclarationsInner-type Declarations

@Aspectpublic class AnnotationInnerTypeAspect {

@DeclareParents( value="br.com.targettrust.aop.annotation.innertype.clazz.*", defaultImpl=PotenciaImpl.class) public Potencia implementadores;

}

Page 11: Aop Aspect J 1.5.4 Capitulo 04

Declare Warnings e ErrorsDeclare Warnings e Errors

@DeclareWarning("call(java.util.Date.new(..))")static final String message = "Você não deve utilizar" + "java.util.Date. Utilize Joda-Time!";

@DeclareError("call(public void *.apagaGeral()) ")static final String error = "Isso é um erro não apague nada!";

Page 12: Aop Aspect J 1.5.4 Capitulo 04

Declare SoftDeclare Soft

• Encapsula Exceptions• org.aspectj.lang.SoftException

• Lança RuntimeException• Forma de tratar errors do AspectJ

Page 13: Aop Aspect J 1.5.4 Capitulo 04

DBCDBC

• Design By Contract• Reforço de contrato• Maior garantia de Implementação• Pilares

• Pré-condições• Pós-condições• Invariantes

Page 14: Aop Aspect J 1.5.4 Capitulo 04

DBCDBC

• Implementado em muitas linguagens • C++• .NET• Java

• JContract• C4J• Contract4J

• Usa AspectJ

Page 15: Aop Aspect J 1.5.4 Capitulo 04

Você aprendeu a...Você aprendeu a...

Utilizar AspectJ com annotations.Utilizar o recurso de declare soft.Conceito DBC.

Page 16: Aop Aspect J 1.5.4 Capitulo 04

ExercíciosExercícios

1) Faça um aspecto utilizando anotações que faça tracing. Esse aspecto deve mostrar todos os parâmetros do método e o seu retorno também. Chame o método execute(String proc,Object inst) várias vezes em uma classe de testes.

2) Declare um erro utilizando anotações para quando for utilizada a classe java.util.HashMap() em uma classe TesteMapEx02 com os métodos usaMap() e testaMap().

3) Baseado no exercicio anterior, faça o mesmo, só que agora gere um warning, utilizando anotações também.

Page 17: Aop Aspect J 1.5.4 Capitulo 04

ExercíciosExercícios

4) Utilizando os conceitos de DBC faça um aspecto que valide as seguintes premissas:Pré condições:

O hotel não aceita hospedes de cabelo verde. O hotel não aceita chekin atens das 10:00.

Pós condições: Ao sair do hotel deve-se pagar a conta. Ao sair do hotel deve-se deixar 20% de gorjeta.

Inváriantes: Para alugar o quarto a pessoa deve ter, no mínimo R$ 500,00.

Package br.com.targettrust.aop.advice.after.java;import java.math.BigDecimal;public interface Hotel {

public void checkIn(String corCabelo, int horaEntrada, BigDecimal dinheiroQueVoceTem);

public BigDecimal getTotalConta();public void checkOut(BigDecimal vindeDaPropina);

}