Aop Aspect J 1.5.4

1.009 visualizações

Publicada em

Presentation of AOP AspectJ course at T@rget Trust.

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

Nenhuma nota no slide

Aop Aspect J 1.5.4

  1. 1. Reduzindo a complexidade e maximizando a modularização de aplicações Java com AOP/AspectJ
  2. 2. <ul><li>23 anos, 5 em TI, 3 em Java </li></ul><ul><li>Técnico em Informática </li></ul><ul><li>Cursando Ciências da Computação </li></ul><ul><li>Certificado Sun SCJP 5.0 e SCWCD 5.0 </li></ul><ul><li>Hoepers( www.hoepers.com.br ) </li></ul><ul><li>Outras Especialidades: VB,ASP,PHP. </li></ul><ul><li>http://www.diego-pacheco.blogspot.com </li></ul>
  3. 3. <ul><li>01. AOP </li></ul><ul><li>02. AspectJ </li></ul><ul><li>03. Concerns & Crosscuting concerns </li></ul><ul><li>04. Over design Vs Under design </li></ul><ul><li>05. Mecanismos de Weaving </li></ul><ul><li>06. Join Points </li></ul><ul><li>07. Expressões Pointcut </li></ul><ul><li>08. Advices </li></ul><ul><li>09. Declare: warnings & errors </li></ul><ul><li>10. Inner-type declarations </li></ul><ul><li>11. AspectJ com anotações </li></ul><ul><li>12. Declare soft </li></ul><ul><li>13. DBC </li></ul>
  4. 4. <ul><li>Novo paradigma </li></ul><ul><li>Separação de conceitos </li></ul><ul><li>Centralização de implementações </li></ul><ul><li>Muitas implementações AOP </li></ul>
  5. 7. <ul><li>Xerox Park </li></ul><ul><li>Primeiro release 2001 </li></ul><ul><li>Ultimo release 1.5.4 (java 5.0) </li></ul><ul><li>Site do Eclipse </li></ul><ul><li>Project leader: Adrian Colyer </li></ul><ul><li>Suporte a ides: AJDT para eclipse </li></ul>
  6. 8. <ul><li>Utiliza Java </li></ul><ul><li>Acesso a todos recursos Java </li></ul><ul><li>Nova Linguagem </li></ul><ul><li>Suporte a anotações </li></ul><ul><li>Mecanismos de weaving </li></ul><ul><li>Forte integração por parte do Spring Framework </li></ul>
  7. 9. <ul><li>Concerns </li></ul><ul><ul><li>Requisitos de negócio </li></ul></ul><ul><ul><li>Requisitos específicos </li></ul></ul><ul><ul><li>Dificilmente reaproveitáveis </li></ul></ul><ul><ul><li>Desenvolvidos em Java </li></ul></ul><ul><ul><li>Difícil de migrar </li></ul></ul>
  8. 10. <ul><li>Crosscuting concerns </li></ul><ul><ul><li>Requisitos transversais </li></ul></ul><ul><ul><li>Requisitos arquiteturais </li></ul></ul><ul><ul><li>Reaproveitáveis </li></ul></ul><ul><ul><li>Redução de complexidade </li></ul></ul><ul><ul><li>Facilita a implementação de concerns </li></ul></ul><ul><ul><li>Fácil de migrar </li></ul></ul>
  9. 13. <ul><li>Dilema: </li></ul><ul><ul><li>Fazer Wrapper </li></ul></ul><ul><ul><li>Usar puramente </li></ul></ul><ul><li>Ambos tem riscos </li></ul><ul><li>Solução: </li></ul><ul><ul><li>AOP/AspectJ </li></ul></ul>
  10. 14. <ul><li>Junção de aspectos com código Java </li></ul><ul><li>Basicamente 3 estratégias </li></ul><ul><ul><li>Compilação </li></ul></ul><ul><ul><li>Runtime </li></ul></ul><ul><ul><li>Adaptação da JVM </li></ul></ul><ul><li>Padrão AspectJ: Compilação </li></ul><ul><li>Compilador AspectJ </li></ul><ul><li>Podemos escolher o mecanismo </li></ul>
  11. 15. <ul><li>Pontos de junção </li></ul><ul><ul><li>Entre </li></ul></ul><ul><ul><ul><li>Java </li></ul></ul></ul><ul><ul><ul><li>Aspectos </li></ul></ul></ul><ul><li>Vários pontos de junção </li></ul>
  12. 16. <ul><li>Chamada de método </li></ul><ul><li>Execução de método </li></ul><ul><li>Chamada de construtor </li></ul><ul><li>Execução de construtor </li></ul><ul><li>Getter de uma propriedade </li></ul><ul><li>Setter de uma propriedade </li></ul><ul><li>Pré-inicialização </li></ul><ul><li>Inicialização </li></ul><ul><li>Inicialização estática </li></ul><ul><li>Handler </li></ul>
  13. 17. <ul><li>São expressões para atingir um ou mais pointcuts. </li></ul><ul><li>São muitos poderosas </li></ul><ul><li>Com muitos recursos </li></ul><ul><li>Recursos para anotações </li></ul><ul><li>Podemos ter expressões compostas </li></ul>
  14. 18. <ul><li>Atributos: </li></ul><ul><ul><li>call </li></ul></ul><ul><ul><li>executin </li></ul></ul><ul><ul><li>within </li></ul></ul><ul><ul><li>whithincode </li></ul></ul><ul><ul><li>annotation </li></ul></ul><ul><ul><li>args </li></ul></ul><ul><ul><li>this </li></ul></ul><ul><ul><li>target </li></ul></ul>
  15. 19. <ul><li>Um exemplo prático: </li></ul><ul><ul><li>Todas as classes de negócio do meu sistema implementam a interface Service </li></ul></ul><ul><ul><li>Todas persistem as informações no banco de dados através do método saveOrUpdate </li></ul></ul><ul><ul><li>Quero logar todos os objetos que estão sendo persistidos </li></ul></ul><ul><li>Como ??? </li></ul>
  16. 20. <ul><li>pointcut saves() </li></ul><ul><li>: </li></ul><ul><li>call </li></ul><ul><li>(* com.blogspot.diego.pacheo.aop.Service.*.saveOrUpdate(..) </li></ul><ul><li>); </li></ul>
  17. 21. <ul><li>Onde implementamos o código AOP </li></ul><ul><li>Podemos utilizar qualquer recurso Java </li></ul><ul><li>Semelhante a um método. </li></ul><ul><li>5 tipos: </li></ul><ul><ul><li>before </li></ul></ul><ul><ul><li>around </li></ul></ul><ul><ul><li>after </li></ul></ul><ul><ul><ul><ul><li>throwing </li></ul></ul></ul></ul><ul><ul><ul><ul><li>returning </li></ul></ul></ul></ul>
  18. 22. <ul><li>Around: </li></ul><ul><ul><li>O mais poderoso advice </li></ul></ul><ul><ul><li>Podemos: </li></ul></ul><ul><ul><ul><li>Modificar os parâmetros </li></ul></ul></ul><ul><ul><ul><li>Podemos modificar o retorno </li></ul></ul></ul><ul><ul><ul><li>Podemos aplicar qualquer processamento </li></ul></ul></ul><ul><ul><ul><li>Podemos levantar uma Exception </li></ul></ul></ul><ul><ul><ul><li>Podemos evitar a execução do método </li></ul></ul></ul>
  19. 23. <ul><li>Continuação: Exemplo de log quando salvamos um objeto. </li></ul><ul><li>before saves(){ System.out.println(“Salvando: &quot; + </li></ul><ul><li>thisJoinPoint.getArgs()); </li></ul><ul><li>} </li></ul>
  20. 24. <ul><li>Podemos gerar Warnings: </li></ul><ul><ul><li>Caso o programador use uma classe deprecated </li></ul></ul><ul><ul><li>Caso o programador chame uma classe de negócio em uma classe de persistência </li></ul></ul><ul><ul><li>Construido através da expressão pointcut </li></ul></ul><ul><ul><li>Passamos uma mensagem de warning </li></ul></ul>
  21. 25. <ul><li>Podemos gerar Errors: </li></ul><ul><ul><li>Caso o programador use uma classe lenta. </li></ul></ul><ul><ul><li>Caso o programador chame uma classe de negócio em uma classe de persistência </li></ul></ul><ul><ul><li>Construido através da expressão pointcut </li></ul></ul><ul><ul><li>Passamos uma mensagem de erro </li></ul></ul><ul><ul><li>Faz com que o artefato Java não seja executado </li></ul></ul>
  22. 26. <ul><li>Recurso muito poderoso </li></ul><ul><li>Podemos: </li></ul><ul><ul><li>Injetar construtores em classes </li></ul></ul><ul><ul><li>Injetar interfaces em classes </li></ul></ul><ul><ul><li>Injetar classe superior em classes </li></ul></ul><ul><ul><li>Injetar propriedades em classes </li></ul></ul><ul><ul><li>Injetar metódos em classes </li></ul></ul><ul><ul><li>Injetar anotações em classes </li></ul></ul><ul><li>As classes podem ver essas modificações </li></ul>
  23. 27. <ul><li>Aspectos podem acessar atributos ou métodos modificados em classes </li></ul><ul><li>Podemos aplicar patterns com esse recurso </li></ul><ul><li>Aspecto ou classes podem implementar metódos no caso de injeção de interfaces </li></ul>
  24. 28. <ul><li>Desenvolvimento baseado em anotações </li></ul><ul><li>Não necessita artefato AspectJ </li></ul><ul><li>Utilizamos um conjunto de anotações provido pelo AspectJ </li></ul><ul><li>Utilizamos uma classe Java </li></ul>
  25. 29. <ul><li>Conjunto de anotações </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>
  26. 30. <ul><li>Recurso para transformar exceptions </li></ul><ul><li>Exceptions checadas são transformadas em não-checadas. </li></ul><ul><li>Útil para tratamento de erros em Aspectos </li></ul><ul><li>Útil para tratamento de erros em classes de negócios </li></ul>
  27. 31. <ul><li>Design By Contract </li></ul><ul><li>Reforço de contrato </li></ul><ul><li>Contrato muito forte </li></ul><ul><li>Muito mais forte que uma interface Java </li></ul><ul><li>Pode ser implementado com AspectJ </li></ul><ul><li>Abstração sob o AspectJ </li></ul><ul><li>Expressões poderosas </li></ul>
  28. 32. <ul><li>Pré-Condições </li></ul><ul><li>Pós-Condições </li></ul><ul><li>Invariantes </li></ul><ul><li>Diversas implementações </li></ul><ul><li>Java e outras linguagens </li></ul><ul><li>Contract4J que usa AspectJ </li></ul>
  29. 33. <ul><li>Prove separação de conceitos </li></ul><ul><li>Diminue a complexidade </li></ul><ul><li>Aumenta a coesão </li></ul><ul><li>Diminui o acoplamento </li></ul><ul><li>Aumenta a produtividade </li></ul><ul><li>Acaba com problema over design / under design </li></ul><ul><li>Evita problemas </li></ul>
  30. 34. <ul><li>Reduz over-head implementacional </li></ul><ul><li>AspectJ linguagem madura </li></ul><ul><li>Suporte a Java 5.0 </li></ul><ul><li>Suporte a Java 6.0 em desenvolvimento </li></ul><ul><li>Aproveita toda infra-estrutura do Java </li></ul><ul><li>Spring Framework 2.x.x se integra fortemente com AspectJ </li></ul>
  31. 35. <ul><li>Perguntas? </li></ul>
  32. 36. <ul><li>Diego Pacheco </li></ul><ul><ul><li>E-mail: </li></ul></ul><ul><ul><li>[email_address] </li></ul></ul><ul><ul><li>Blog: </li></ul></ul><ul><ul><li>www.diego-pacheco.blogspot.com </li></ul></ul><ul><ul><li>Fone: </li></ul></ul><ul><ul><li>(51) 8128-2904 </li></ul></ul>
  33. 37. <ul><li>Reduzindo a complexidade e maximizando a modularização de aplicações Java com AOP/AspectJ </li></ul>

×