AOP – AspectJ 1.5.4 Programação Orientada a Aspectos
4 Recursos Adicionais
Objetivos <ul><li>Saber utilizar AspectJ com annotations. </li></ul><ul><li>Saber utilizar o recurso de declare soft. </li...
AspectJ com annotations <ul><li>Conjunto de anotações AspectJ </li></ul><ul><ul><li>@Aspect </li></ul></ul><ul><ul><li>@Po...
AspectJ com annotations <ul><li>Mais limitado </li></ul><ul><li>Não podemos declarar  </li></ul><ul><ul><li>Aspectos Privi...
AspectJ com annotations @Pointcut ( &quot;call(* *.*(int)) && args(i) && if()&quot; ) public   static   boolean  chamadaIf...
AspectJ com annotations <ul><li>Around </li></ul><ul><ul><li>Problema do proceed() </li></ul></ul><ul><li>Solução </li></u...
AspectJ com annotations @Around ( &quot;call(* *.*.now(..))&quot; ) public  String getData(ProceedingJoinPoint pjp){ try  ...
Inner-type Declarations <ul><li>Mais limitado </li></ul><ul><ul><li>Não adiciona </li></ul></ul><ul><ul><ul><li>Atributos ...
Inner-type Declarations @Aspect public   class  AnnotationInnerTypeAspect { @DeclareParents ( value= &quot;br.com.targettr...
Declare Warnings e Errors @DeclareWarning ( &quot;call(java.util.Date.new(..))&quot; ) static   final  String  message  = ...
Declare Soft <ul><li>Encapsula Exceptions </li></ul><ul><ul><li>org.aspectj.lang.SoftException </li></ul></ul><ul><li>Lanç...
DBC <ul><li>Design By Contract </li></ul><ul><li>Reforço de contrato </li></ul><ul><li>Maior garantia de Implementação </l...
DBC <ul><li>Implementado em muitas linguagens  </li></ul><ul><ul><li>C++ </li></ul></ul><ul><ul><li>.NET </li></ul></ul><u...
Você aprendeu a... <ul><li>Utilizar AspectJ com annotations. </li></ul><ul><li>Utilizar o recurso de declare soft. </li></...
Exercícios <ul><li>1) Faça um aspecto utilizando anotações que faça tracing. Esse aspecto deve mostrar todos os parâmetros...
Exercícios <ul><li>4) Utilizando os conceitos de DBC faça um aspecto que valide as seguintes premissas: </li></ul><ul><ul>...
Upcoming SlideShare
Loading in...5
×

Aop Aspect J 1.5.4 Capitulo 04

1,391

Published on

Published in: Technology, News & Politics
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,391
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
24
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Aop Aspect J 1.5.4 Capitulo 04

  1. 1. AOP – AspectJ 1.5.4 Programação Orientada a Aspectos
  2. 2. 4 Recursos Adicionais
  3. 3. Objetivos <ul><li>Saber utilizar AspectJ com annotations. </li></ul><ul><li>Saber utilizar o recurso de declare soft. </li></ul><ul><li>Conhecer o conceito DBC. </li></ul>
  4. 4. AspectJ com annotations <ul><li>Conjunto de anotações AspectJ </li></ul><ul><ul><li>@Aspect </li></ul></ul><ul><ul><li>@Pointcut </li></ul></ul><ul><ul><li>@Before </li></ul></ul><ul><ul><li>@After </li></ul></ul><ul><ul><li>@AfterReturning </li></ul></ul><ul><ul><li>@AfterThrowing </li></ul></ul><ul><ul><li>@Around </li></ul></ul>
  5. 5. AspectJ com annotations <ul><li>Mais limitado </li></ul><ul><li>Não podemos declarar </li></ul><ul><ul><li>Aspectos Privilegiados </li></ul></ul><ul><li>Imports não surtem efeito </li></ul><ul><ul><li>Use nome completo. EX: java.util.List </li></ul></ul>
  6. 6. AspectJ com annotations @Pointcut ( &quot;call(* *.*(int)) && args(i) && if()&quot; ) public static boolean chamadaIf( int i) { return i > 0; } @AfterReturning ( &quot;criticalOperation()&quot; ) public void phew() { System. out .println( &quot;phew&quot; ); } @AfterReturning (pointcut= &quot;call(Foo+.new(..))&quot; ,returning= &quot;f&quot; ) public void itsAFoo(Foo f) { System. out .println( &quot;It's a Foo: &quot; + f); }
  7. 7. AspectJ com annotations <ul><li>Around </li></ul><ul><ul><li>Problema do proceed() </li></ul></ul><ul><li>Solução </li></ul><ul><ul><li>Interface AspectJ </li></ul></ul><ul><ul><ul><li>org.aspectj.lang.ProceedingJoinPoint </li></ul></ul></ul>
  8. 8. AspectJ com annotations @Around ( &quot;call(* *.*.now(..))&quot; ) public String getData(ProceedingJoinPoint pjp){ try { System. out .println(pjp.getSignature()); return (String)pjp.proceed(); } catch (Throwable e) { return null; } }
  9. 9. Inner-type Declarations <ul><li>Mais limitado </li></ul><ul><ul><li>Não adiciona </li></ul></ul><ul><ul><ul><li>Atributos </li></ul></ul></ul><ul><ul><ul><li>Construtores </li></ul></ul></ul><ul><li>Pode-se adicionar interfaces </li></ul><ul><li>Pode-se adicionar classe pai </li></ul>
  10. 10. Inner-type Declarations @Aspect public class AnnotationInnerTypeAspect { @DeclareParents ( value= &quot;br.com.targettrust.aop.annotation.innertype.clazz.*&quot; , defaultImpl=PotenciaImpl. class ) public Potencia implementadores ; }
  11. 11. Declare Warnings e Errors @DeclareWarning ( &quot;call(java.util.Date.new(..))&quot; ) static final String message = &quot;Você não deve utilizar&quot; + &quot;java.util.Date. Utilize Joda-Time!&quot; ; @DeclareError ( &quot;call(public void *.apagaGeral()) &quot; ) static final String error = &quot;Isso é um erro não apague nada!&quot; ;
  12. 12. Declare Soft <ul><li>Encapsula Exceptions </li></ul><ul><ul><li>org.aspectj.lang.SoftException </li></ul></ul><ul><li>Lança RuntimeException </li></ul><ul><li>Forma de tratar errors do AspectJ </li></ul>
  13. 13. DBC <ul><li>Design By Contract </li></ul><ul><li>Reforço de contrato </li></ul><ul><li>Maior garantia de Implementação </li></ul><ul><li>Pilares </li></ul><ul><ul><li>Pré-condições </li></ul></ul><ul><ul><li>Pós-condições </li></ul></ul><ul><ul><li>Invariantes </li></ul></ul>
  14. 14. DBC <ul><li>Implementado em muitas linguagens </li></ul><ul><ul><li>C++ </li></ul></ul><ul><ul><li>.NET </li></ul></ul><ul><ul><li>Java </li></ul></ul><ul><ul><ul><li>JContract </li></ul></ul></ul><ul><ul><ul><li>C4J </li></ul></ul></ul><ul><ul><ul><li>Contract4J </li></ul></ul></ul><ul><ul><ul><ul><li>Usa AspectJ </li></ul></ul></ul></ul>
  15. 15. Você aprendeu a... <ul><li>Utilizar AspectJ com annotations. </li></ul><ul><li>Utilizar o recurso de declare soft. </li></ul><ul><li>Conceito DBC. </li></ul>
  16. 16. Exercícios <ul><li>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. </li></ul><ul><li>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(). </li></ul><ul><li>3) Baseado no exercicio anterior, faça o mesmo, só que agora gere um warning, utilizando anotações também. </li></ul>
  17. 17. Exercícios <ul><li>4) Utilizando os conceitos de DBC faça um aspecto que valide as seguintes premissas: </li></ul><ul><ul><li>Pré condições: </li></ul></ul><ul><ul><ul><ul><li>O hotel não aceita hospedes de cabelo verde. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>O hotel não aceita chekin atens das 10:00. </li></ul></ul></ul></ul><ul><ul><li>Pós condições: </li></ul></ul><ul><ul><ul><ul><li>Ao sair do hotel deve-se pagar a conta. </li></ul></ul></ul></ul><ul><ul><ul><ul><li>Ao sair do hotel deve-se deixar 20% de gorjeta. </li></ul></ul></ul></ul><ul><ul><li>Inváriantes: </li></ul></ul><ul><ul><ul><ul><li>Para alugar o quarto a pessoa deve ter, no mínimo R$ 500,00. </li></ul></ul></ul></ul>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); }
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×