SlideShare ist ein Scribd-Unternehmen logo
1 von 17
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.

Weitere ähnliche Inhalte

Andere mochten auch

Andere mochten auch (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
 

Ähnlich wie 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 novoGiovanni 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 PythonAlvaro 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 PythonGuilherme 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
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02Natanael 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 DjangoOsvaldo Santana Neto
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
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.xNorton 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çaossuserc6132d
 
Linguagem de Programação Java
Linguagem de Programação JavaLinguagem de Programação Java
Linguagem de Programação Javathomasdacosta
 

Ähnlich wie 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
 

Mehr von 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.pdfDiego Pacheco
 
Thoughts about Shape Up
Thoughts about Shape UpThoughts about Shape Up
Thoughts about Shape UpDiego Pacheco
 
Encryption Deep Dive
Encryption Deep DiveEncryption Deep Dive
Encryption Deep DiveDiego Pacheco
 
Management: Doing the non-obvious! III
Management: Doing the non-obvious! IIIManagement: Doing the non-obvious! III
Management: Doing the non-obvious! IIIDiego Pacheco
 
Design is not Subjective
Design is not SubjectiveDesign is not Subjective
Design is not SubjectiveDiego 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 productionDiego Pacheco
 
Nine lies about work
Nine lies about workNine lies about work
Nine lies about workDiego Pacheco
 
Management: doing the nonobvious!
Management: doing the nonobvious!Management: doing the nonobvious!
Management: doing the nonobvious!Diego Pacheco
 
Dealing with dependencies
Dealing  with dependenciesDealing  with dependencies
Dealing with dependenciesDiego Pacheco
 
Dealing with dependencies in tests
Dealing  with dependencies in testsDealing  with dependencies in tests
Dealing with dependencies in testsDiego Pacheco
 

Mehr von 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