10. 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
11. 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.
12. 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
13. AspectsAspects
• Pode ter construtor
• Sem argumentos
• Sem levantar Exceptions checadas
• Singletons
• Recuperar instância
• org.aspectj.lang.Aspects
• aspectOf(Class c)
15. 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);
}
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 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.