Este documento descreve conceitos de programação orientada a aspectos usando AspectJ, incluindo tipos de advice como before, after, around e throwing/returning, a variável ThisJoinPoint, criação de aspectos e declarações de tipo interno.
AdvicesAdvices
int around(int x,inty):
call(public int *.*.soma2(int,int)) &&
args(x,y){
System.out.println("Around advice" +
+ "modificando valores dinamicos");
return proceed(x,y);
}
10.
ThisJoinPointThisJoinPoint
• Variável dereferência especial
• Utilizável no contexto do advice
• org.aspectj.lang.JoinPoint
• Informações do contexto AOP
• Acesso a argumentos e objetos
11.
ThisJoinPointThisJoinPoint
Método Descrição
getArgs() Retornaos 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.
12.
AspectsAspects
• Semelhante aclasse 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
13.
AspectsAspects
• Pode terconstrutor
• Sem argumentos
• Sem levantar Exceptions checadas
• Singletons
• Recuperar instância
• org.aspectj.lang.Aspects
• aspectOf(Class c)
Inner-type DeclarationsInner-type Declarations
declareparents: 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);
}
16.
Você aprendeu a...Vocêaprendeu a...
Utilizar os tipos de Advices do AspectJ
Recursos de ThisJoinPoint
Criar aspectos
Utilizar inner-type declarations
17.
ExercíciosExercícios
1) Faça umAspecto 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.