Aop Aspect J 1.5.4 Capitulo 04

Preview:

Citation preview

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);

}

Recommended