aop aspect j 1.5.4 capitulo 04
TRANSCRIPT
AOP – AspectJ 1.5.4Programação Orientada a
Aspectos
44Recursos AdicionaisRecursos Adicionais
ObjetivosObjetivos
Saber utilizar AspectJ com annotations.Saber utilizar o recurso de declare
soft.Conhecer o conceito DBC.
AspectJ com annotationsAspectJ com annotations
Conjunto de anotações AspectJ@Aspect@Pointcut@Before@After@AfterReturning@AfterThrowing@Around
AspectJ com annotationsAspectJ com annotations
Mais limitadoNão podemos declarar
Aspectos PrivilegiadosImports não surtem efeito
Use nome completo. EX: java.util.List
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);}
AspectJ com annotationsAspectJ com annotations
• Around• Problema do proceed()
• Solução– Interface AspectJ
– org.aspectj.lang.ProceedingJoinPoint
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; }}
Inner-type DeclarationsInner-type Declarations
• Mais limitado• Não adiciona
• Atributos• Construtores
• Pode-se adicionar interfaces• Pode-se adicionar classe pai
Inner-type DeclarationsInner-type Declarations
@Aspectpublic class AnnotationInnerTypeAspect {
@DeclareParents( value="br.com.targettrust.aop.annotation.innertype.clazz.*", defaultImpl=PotenciaImpl.class) public Potencia implementadores;
}
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!";
Declare SoftDeclare Soft
• Encapsula Exceptions• org.aspectj.lang.SoftException
• Lança RuntimeException• Forma de tratar errors do AspectJ
DBCDBC
• Design By Contract• Reforço de contrato• Maior garantia de Implementação• Pilares
• Pré-condições• Pós-condições• Invariantes
DBCDBC
• Implementado em muitas linguagens • C++• .NET• Java
• JContract• C4J• Contract4J
• Usa AspectJ
Você aprendeu a...Você aprendeu a...
Utilizar AspectJ com annotations.Utilizar o recurso de declare soft.Conceito DBC.
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.
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);
}