SlideShare uma empresa Scribd logo
AOP – AspectJ 1.5.4
Programação Orientada a Aspectos
33
AdviceAdvice
ObjetivosObjetivos
Saber utilizar os tipos de Advices do AspectJ
Conhecer recursos de ThisJoinPoint
Saber criar aspectos
Saber utilizar inner-type declarations
AdvicesAdvices
Pointcuts para advices
Tipos:
Before
Around
After
 Throwing
 Returning
AdvicesAdvices
before():
call(* *.*save(Object)) {
System.out.println("Simples execucao"
+ " antes do metodo.");
}
AdvicesAdvices
after():
call(* *.*save(Object)){
System.out.println("Simples execucao"
+
"depois do" +
"metodo.");
}
AdvicesAdvices
after()
returning(Object o):
call(public Object *.*.find()){
String x = (String)o;
x += "123";
System.out.println("retorno: " + x);
}
AdvicesAdvices
after()
throwing(Exception e):
call(public void *.*.delete()){
System.out.println("Erro! " +
Mensagem: " +
e.getMessage());
}
AdvicesAdvices
int around(int x,int y):
call(public int *.*.soma2(int,int)) &&
args(x,y){
System.out.println("Around advice" +
+ "modificando valores dinamicos");
return proceed(x,y);
}
ThisJoinPointThisJoinPoint
• Variável de referência especial
• Utilizável no contexto do advice
• org.aspectj.lang.JoinPoint
• Informações do contexto AOP
• Acesso a argumentos e objetos
ThisJoinPointThisJoinPoint
Método Descrição
getArgs() Retorna os argumentos do método
getSignature() Retorna a assinatura do método
getSourceLocation() Fonte e linha do código Java
getClass() Retorna a classe de implementação do JoinPoint
getKind() Tipo de join point. Ex.: method-call
getTarget() Retorna o objeto(Java) em execução
getStaticPart() É um helper do join point que contém as informações
que podem ser acessadas de forma estática.
getThis() Semelhante ao target, porém sempre irá retornar o
objeto que estiver relacionado ao this() de expressão
pointcut.
AspectsAspects
• Semelhante a classe Java
• Forma de solução Crosscuting Concern
• Pointcuts, Advices
• Suporta herança (Abstrato)
• Variáveis e métodos Java
• Aspectos alinhados (estatico)
• Não são instanciados diretamente
AspectsAspects
• Pode ter construtor
• Sem argumentos
• Sem levantar Exceptions checadas
• Singletons
• Recuperar instância
• org.aspectj.lang.Aspects
• aspectOf(Class c)
Inner-type DeclarationsInner-type Declarations
• Adicionar membros de forma dinâmica
• classe pai
• set de interfaces
• métodos
• anotações
Inner-type DeclarationsInner-type Declarations
declare parents: br.com.B extends br.com.A;
declare parents: br.com.B implements br.com.A;
private List<Porta> Casa.portas = new ArrayList<Porta>();
public void Casa.pintar(Cor c){
System.out.println("Pintando a casa de cor:" + c);
}
public Casa.new(String rua) {
super();
System.out.println(rua);
}
Você aprendeu a...Você aprendeu a...
Utilizar os tipos de Advices do AspectJ
Recursos de ThisJoinPoint
Criar aspectos
Utilizar inner-type declarations
ExercíciosExercícios
1) Faça um Aspecto e utilizando o advice do tipo before() log em um arquivo texto todas as
chamadas de métodos da classe Sistema. Essa classe deve ter 5 metodos: ligar(), parar(),
desligar(), acelerar(), e explodir(), crie a classe e forneça qualquer implementação, após isto chame
algumas vezes estes métodos.
2) Aproveite o exercicio 1 e mude o advice before para o advice after e faça o método
desligar(String motivo) e log isso também.
3) Faça um advice around que não execute o método ligar se o dia de hoje for par e além disso
levante uma exception do tipo RuntimeExecption(“Hoje o sistema está desligado!”).
4) Crie a interface Contador com o método int contar(int i) e int showTotalCount(). Faça via
inner-type declaration que a classe sistema tenha um contador com todas as chamadas aos
métodos acelerar() e parar(). Mostre o resultado em uma classe main, use cast ou reflection.

Mais conteúdo relacionado

Destaque

Idade media2
Idade media2Idade media2
Idade media2
nilmarfgalvao
 
Teatro en tiempo libre
Teatro en tiempo libreTeatro en tiempo libre
Teatro en tiempo libre
Eva María
 
A água e os números
A água e os númerosA água e os números
A água e os números
SimoneHelenDrumond
 
Presentació Empresa Eurona
Presentació Empresa EuronaPresentació Empresa Eurona
Presentació Empresa Eurona
jaumesi
 
Apresentação1
Apresentação1Apresentação1
Apresentação1Ana Castro
 
Picasso 3
Picasso 3Picasso 3
Picasso 3
encarnajuticia
 
O Espiritismo por Herculano Pires
O Espiritismo por Herculano PiresO Espiritismo por Herculano Pires
O Espiritismo por Herculano Piresguest7849ae00
 
Linguagens língualinguagemvariaçãolinguística
Linguagens língualinguagemvariaçãolinguísticaLinguagens língualinguagemvariaçãolinguística
Linguagens língualinguagemvariaçãolinguísticaKênia Machado
 
Sondas
SondasSondas
Sondas
profeauto
 
PPPs para construir la Smart City
PPPs para construir la Smart CityPPPs para construir la Smart City
PPPs para construir la Smart City
Fernando Tomás Casado
 
Joomla16instalacionremota
Joomla16instalacionremotaJoomla16instalacionremota
Joomla16instalacionremota
jorreto
 
Gustavo rogers 3rd hour
Gustavo rogers 3rd hourGustavo rogers 3rd hour
Gustavo rogers 3rd hourdonasofia
 
Manual de gparted
Manual de gpartedManual de gparted
Manual de gparted
Hugo Araujo
 
Permen esdm 01 2013 ttg pengendalian bbm
Permen esdm 01 2013 ttg pengendalian bbmPermen esdm 01 2013 ttg pengendalian bbm
Permen esdm 01 2013 ttg pengendalian bbmSei Enim
 
Análise e Simulação de Riscos com a aplicação de SDPM
Análise e Simulação de Riscos com a aplicação de SDPMAnálise e Simulação de Riscos com a aplicação de SDPM
Análise e Simulação de Riscos com a aplicação de SDPM
Eng Jefferson Guimarães, SpP, MBA, PMP e IPMA-C
 

Destaque (20)

Idade media2
Idade media2Idade media2
Idade media2
 
Teatro en tiempo libre
Teatro en tiempo libreTeatro en tiempo libre
Teatro en tiempo libre
 
A água e os números
A água e os númerosA água e os números
A água e os números
 
Presentació Empresa Eurona
Presentació Empresa EuronaPresentació Empresa Eurona
Presentació Empresa Eurona
 
Ensamblaje 8 Mariluz
Ensamblaje 8 MariluzEnsamblaje 8 Mariluz
Ensamblaje 8 Mariluz
 
Apresentação1
Apresentação1Apresentação1
Apresentação1
 
Picasso 3
Picasso 3Picasso 3
Picasso 3
 
O Espiritismo por Herculano Pires
O Espiritismo por Herculano PiresO Espiritismo por Herculano Pires
O Espiritismo por Herculano Pires
 
0981 001
0981 0010981 001
0981 001
 
Mis compas de Marketing
Mis compas de MarketingMis compas de Marketing
Mis compas de Marketing
 
Linguagens língualinguagemvariaçãolinguística
Linguagens língualinguagemvariaçãolinguísticaLinguagens língualinguagemvariaçãolinguística
Linguagens língualinguagemvariaçãolinguística
 
Sondas
SondasSondas
Sondas
 
PPPs para construir la Smart City
PPPs para construir la Smart CityPPPs para construir la Smart City
PPPs para construir la Smart City
 
Joomla16instalacionremota
Joomla16instalacionremotaJoomla16instalacionremota
Joomla16instalacionremota
 
Gustavo rogers 3rd hour
Gustavo rogers 3rd hourGustavo rogers 3rd hour
Gustavo rogers 3rd hour
 
Hadoop~Yahoo! JAPANの活用について~
Hadoop~Yahoo! JAPANの活用について~Hadoop~Yahoo! JAPANの活用について~
Hadoop~Yahoo! JAPANの活用について~
 
Manual de gparted
Manual de gpartedManual de gparted
Manual de gparted
 
Permen esdm 01 2013 ttg pengendalian bbm
Permen esdm 01 2013 ttg pengendalian bbmPermen esdm 01 2013 ttg pengendalian bbm
Permen esdm 01 2013 ttg pengendalian bbm
 
Aa 1-sst600
Aa 1-sst600Aa 1-sst600
Aa 1-sst600
 
Análise e Simulação de Riscos com a aplicação de SDPM
Análise e Simulação de Riscos com a aplicação de SDPMAnálise e Simulação de Riscos com a aplicação de SDPM
Análise e Simulação de Riscos com a aplicação de SDPM
 

Semelhante a Aop Aspect J 1.5.4 Capitulo 03

C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
Giovanni Bassi
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
Alvaro Oliveira
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Guilherme Garcia
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
Luciano Ramalho
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
Julio Cesar Eiras Melanda
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
Natanael Fonseca
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
Osvaldo Santana Neto
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
Eder Magalhães
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
wildcat9335
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.x
Norton Guimarães
 
Palestra python
Palestra pythonPalestra python
Palestra pythonRony Cruch
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
ssuserc6132d
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
nsitechtalks
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
thomasdacosta
 
Meta-programacao em python
Meta-programacao em pythonMeta-programacao em python
Meta-programacao em python
Tiago Albineli Motta
 

Semelhante a Aop Aspect J 1.5.4 Capitulo 03 (20)

C#4 – O que há de novo
C#4 – O que há de novoC#4 – O que há de novo
C#4 – O que há de novo
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Java5
Java5Java5
Java5
 
Programando para web com python - Introdução a Python
Programando para web com python - Introdução a PythonProgramando para web com python - Introdução a Python
Programando para web com python - Introdução a Python
 
Minicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e PythonMinicurso de Django - Desenvolvimento ágil web com Django e Python
Minicurso de Django - Desenvolvimento ágil web com Django e Python
 
Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)Orientação a objetos em Python (compacto)
Orientação a objetos em Python (compacto)
 
Python Emsl2009
Python Emsl2009Python Emsl2009
Python Emsl2009
 
Python
PythonPython
Python
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Python2.5.ppt
Python2.5.pptPython2.5.ppt
Python2.5.ppt
 
Programação Web com PHP 7.x
Programação Web com PHP 7.xProgramação Web com PHP 7.x
Programação Web com PHP 7.x
 
Palestra python
Palestra pythonPalestra python
Palestra python
 
Conceito de funçao e modularizaçao
Conceito de funçao e modularizaçaoConceito de funçao e modularizaçao
Conceito de funçao e modularizaçao
 
Código Limpo
Código LimpoCódigo Limpo
Código Limpo
 
String e IO
String e IOString e IO
String e IO
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Java
 
Meta-programacao em python
Meta-programacao em pythonMeta-programacao em python
Meta-programacao em python
 

Mais de Diego Pacheco

Naming Things Book : Simple Book Review!
Naming Things Book : Simple Book Review!Naming Things Book : Simple Book Review!
Naming Things Book : Simple Book Review!
Diego Pacheco
 
Continuous Discovery Habits Book Review.pdf
Continuous Discovery Habits  Book Review.pdfContinuous Discovery Habits  Book Review.pdf
Continuous Discovery Habits Book Review.pdf
Diego Pacheco
 
Thoughts about Shape Up
Thoughts about Shape UpThoughts about Shape Up
Thoughts about Shape Up
Diego Pacheco
 
Holacracy
HolacracyHolacracy
Holacracy
Diego Pacheco
 
AWS IAM
AWS IAMAWS IAM
AWS IAM
Diego Pacheco
 
Encryption Deep Dive
Encryption Deep DiveEncryption Deep Dive
Encryption Deep Dive
Diego Pacheco
 
Sec 101
Sec 101Sec 101
Sec 101
Diego Pacheco
 
Reflections on SCM
Reflections on SCMReflections on SCM
Reflections on SCM
Diego Pacheco
 
Management: Doing the non-obvious! III
Management: Doing the non-obvious! IIIManagement: Doing the non-obvious! III
Management: Doing the non-obvious! III
Diego Pacheco
 
Design is not Subjective
Design is not SubjectiveDesign is not Subjective
Design is not Subjective
Diego Pacheco
 
Architecture & Engineering : Doing the non-obvious!
Architecture & Engineering :  Doing the non-obvious!Architecture & Engineering :  Doing the non-obvious!
Architecture & Engineering : Doing the non-obvious!
Diego Pacheco
 
Management doing the non-obvious II
Management doing the non-obvious II Management doing the non-obvious II
Management doing the non-obvious II
Diego Pacheco
 
Testing in production
Testing in productionTesting in production
Testing in production
Diego Pacheco
 
Nine lies about work
Nine lies about workNine lies about work
Nine lies about work
Diego Pacheco
 
Management: doing the nonobvious!
Management: doing the nonobvious!Management: doing the nonobvious!
Management: doing the nonobvious!
Diego Pacheco
 
AI and the Future
AI and the FutureAI and the Future
AI and the Future
Diego Pacheco
 
Dealing with dependencies
Dealing  with dependenciesDealing  with dependencies
Dealing with dependencies
Diego Pacheco
 
Dealing with dependencies in tests
Dealing  with dependencies in testsDealing  with dependencies in tests
Dealing with dependencies in tests
Diego Pacheco
 
Kanban 2020
Kanban 2020Kanban 2020
Kanban 2020
Diego Pacheco
 

Mais de Diego Pacheco (20)

Naming Things Book : Simple Book Review!
Naming Things Book : Simple Book Review!Naming Things Book : Simple Book Review!
Naming Things Book : Simple Book Review!
 
Continuous Discovery Habits Book Review.pdf
Continuous Discovery Habits  Book Review.pdfContinuous Discovery Habits  Book Review.pdf
Continuous Discovery Habits Book Review.pdf
 
Thoughts about Shape Up
Thoughts about Shape UpThoughts about Shape Up
Thoughts about Shape Up
 
Holacracy
HolacracyHolacracy
Holacracy
 
AWS IAM
AWS IAMAWS IAM
AWS IAM
 
CDKs
CDKsCDKs
CDKs
 
Encryption Deep Dive
Encryption Deep DiveEncryption Deep Dive
Encryption Deep Dive
 
Sec 101
Sec 101Sec 101
Sec 101
 
Reflections on SCM
Reflections on SCMReflections on SCM
Reflections on SCM
 
Management: Doing the non-obvious! III
Management: Doing the non-obvious! IIIManagement: Doing the non-obvious! III
Management: Doing the non-obvious! III
 
Design is not Subjective
Design is not SubjectiveDesign is not Subjective
Design is not Subjective
 
Architecture & Engineering : Doing the non-obvious!
Architecture & Engineering :  Doing the non-obvious!Architecture & Engineering :  Doing the non-obvious!
Architecture & Engineering : Doing the non-obvious!
 
Management doing the non-obvious II
Management doing the non-obvious II Management doing the non-obvious II
Management doing the non-obvious II
 
Testing in production
Testing in productionTesting in production
Testing in production
 
Nine lies about work
Nine lies about workNine lies about work
Nine lies about work
 
Management: doing the nonobvious!
Management: doing the nonobvious!Management: doing the nonobvious!
Management: doing the nonobvious!
 
AI and the Future
AI and the FutureAI and the Future
AI and the Future
 
Dealing with dependencies
Dealing  with dependenciesDealing  with dependencies
Dealing with dependencies
 
Dealing with dependencies in tests
Dealing  with dependencies in testsDealing  with dependencies in tests
Dealing with dependencies in tests
 
Kanban 2020
Kanban 2020Kanban 2020
Kanban 2020
 

Aop Aspect J 1.5.4 Capitulo 03