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 Pacheco E-mail: [email_address] Blog: www.diego-pacheco.blogspot.com Fone: (51) 8128-2904
Reduzindo a complexidade e maximizando a modularização de aplicações Java com AOP/AspectJ

Aop Aspect J 1.5.4

  • 1.
    Reduzindo a complexidadee maximizando a modularização de aplicações Java com AOP/AspectJ
  • 2.
    23 anos, 5em 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
  • 3.
    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
  • 4.
    Novo paradigma Separaçãode conceitos Centralização de implementações Muitas implementações AOP
  • 5.
  • 6.
  • 7.
    Xerox Park Primeirorelease 2001 Ultimo release 1.5.4 (java 5.0) Site do Eclipse Project leader: Adrian Colyer Suporte a ides: AJDT para eclipse
  • 8.
    Utiliza Java Acessoa todos recursos Java Nova Linguagem Suporte a anotações Mecanismos de weaving Forte integração por parte do Spring Framework
  • 9.
    Concerns Requisitos denegócio Requisitos específicos Dificilmente reaproveitáveis Desenvolvidos em Java Difícil de migrar
  • 10.
    Crosscuting concerns Requisitostransversais Requisitos arquiteturais Reaproveitáveis Redução de complexidade Facilita a implementação de concerns Fácil de migrar
  • 11.
  • 12.
  • 13.
    Dilema: Fazer WrapperUsar puramente Ambos tem riscos Solução: AOP/AspectJ
  • 14.
    Junção de aspectoscom 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
  • 15.
    Pontos de junçãoEntre Java Aspectos Vários pontos de junção
  • 16.
    Chamada de métodoExecuçã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
  • 17.
    São expressões paraatingir um ou mais pointcuts. São muitos poderosas Com muitos recursos Recursos para anotações Podemos ter expressões compostas
  • 18.
    Atributos: callexecutin within whithincode annotation args this target
  • 19.
    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 ???
  • 20.
    pointcut saves(): call (* com.blogspot.diego.pacheo.aop.Service.*.saveOrUpdate(..) );
  • 21.
    Onde implementamos ocódigo AOP Podemos utilizar qualquer recurso Java Semelhante a um método. 5 tipos: before around after throwing returning
  • 22.
    Around: O maispoderoso 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
  • 23.
    Continuação: Exemplo delog quando salvamos um objeto. before saves(){ System.out.println(“Salvando: " + thisJoinPoint.getArgs()); }
  • 24.
    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
  • 25.
    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
  • 26.
    Recurso muito poderosoPodemos: 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
  • 27.
    Aspectos podem acessaratributos 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
  • 28.
    Desenvolvimento baseado emanotações Não necessita artefato AspectJ Utilizamos um conjunto de anotações provido pelo AspectJ Utilizamos uma classe Java
  • 29.
    Conjunto de anotações@Aspect @Pointcut @Before @After @AfterReturning @AfterThrowing @Around
  • 30.
    Recurso para transformarexceptions 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
  • 31.
    Design By ContractReforç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
  • 32.
    Pré-Condições Pós-Condições InvariantesDiversas implementações Java e outras linguagens Contract4J que usa AspectJ
  • 33.
    Prove separação deconceitos Diminue a complexidade Aumenta a coesão Diminui o acoplamento Aumenta a produtividade Acaba com problema over design / under design Evita problemas
  • 34.
    Reduz over-head implementacionalAspectJ 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
  • 35.
  • 36.
    Diego Pacheco E-mail:[email_address] Blog: www.diego-pacheco.blogspot.com Fone: (51) 8128-2904
  • 37.
    Reduzindo a complexidadee maximizando a modularização de aplicações Java com AOP/AspectJ