Upload
diego-pacheco
View
820
Download
4
Embed Size (px)
DESCRIPTION
Presentation of AOP AspectJ course at T@rget Trust.
Citation preview
Reduzindo a complexidade e maximizando a modularização de aplicações Java com AOP/AspectJ
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
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
Novo paradigma Separação de conceitos Centralização de implementações Muitas implementações AOP
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
Utiliza Java Acesso a todos recursos Java Nova Linguagem Suporte a anotações Mecanismos de weaving Forte integração por parte do Spring
Framework
Concerns Requisitos de negócio Requisitos específicos Dificilmente reaproveitáveis Desenvolvidos em Java Difícil de migrar
Crosscuting concerns Requisitos transversais Requisitos arquiteturais Reaproveitáveis Redução de complexidade Facilita a implementação de concerns Fácil de migrar
Dilema: Fazer Wrapper Usar puramente
Ambos tem riscos Solução:
AOP/AspectJ
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
Pontos de junção Entre▪ Java▪ Aspectos
Vários pontos de junção
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
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
Atributos: call executin within whithincode annotation args this target
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 ???
pointcut saves() : call (*
com.blogspot.diego.pacheo.aop.Service.*.saveOrUpdate(..)
);
Onde implementamos o código AOP Podemos utilizar qualquer recurso Java Semelhante a um método. 5 tipos:
before around after
▪ throwing▪ returning
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
Continuação: Exemplo de log quando salvamos um objeto.
before saves(){ System.out.println(“Salvando: " +
thisJoinPoint.getArgs());}
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
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
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
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
Desenvolvimento baseado em anotações Não necessita artefato AspectJ Utilizamos um conjunto de anotações
provido pelo AspectJ Utilizamos uma classe Java
Conjunto de anotações @Aspect @Pointcut @Before @After @AfterReturning @AfterThrowing @Around
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
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
Pré-Condições Pós-Condições Invariantes Diversas implementações Java e outras linguagens Contract4J que usa AspectJ
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
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
Perguntas?
Diego PachecoE-mail:
www.diego-pacheco.blogspot.comFone:
(51) 8128-2904
Reduzindo a complexidade e maximizando a modularização de aplicações Java com AOP/AspectJ