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