Como Criar uma Java Annotation

11 respostas
R

Olá pessoal

Eu estou tentando criar uma anottaion para a realização de atividades de log na aplicação, isto é, todos os métodos que forem anotados devem realizar o log.

Para uma etapa inicial, fiz uma annotation bem simples, que possui o seguinte código:

@Retention (RetentionPolicy.RUNTIME)
@Target (ElementType.METHOD)
@Documented
public @interface Log {

	Class type();
	String method();

}

Ou seja, com esta annotation eu seto a classe a ser persistida e o nome do método que está realizando o acesso.

Para acessar a annotation eu faço o seguinte:

@Log (type=Contact.class, method="updateContact")

Agora vamos ao problema: como faço para o Java realizar uma ação nos métodos que recebem está annotation? Este conceito que eu ainda não consegui entender.

Desde já agradeço pela ajuda.

11 Respostas

T

Você vai precisar fazer algo semelhante ao AspectWerkz com Annotations. Veja a documentação e entenda por que é que é tão complicado.

De qualquer maneira, lembre-se que Annotations, em seu uso comum, não modificam o funcionamento de seu programa. É só quando são usadas com alguns outros recursos (tais como Java Agents etc.) que é possível modificar o funcionamento.

R

Eu gostaria apenas que os métodos que receberem minha anotação executem um método logo após sua execução. Até para uma ação simples como esta o precesso de execução da anotação é complexo?

Você aconselha eu chamar o método normalmente ao invés de criar a anotação?

T

Eu aconselho você a aprender AOP (AspectWerkz ou AspectJ) se quiser fazer exatamente isso que você quer fazer. Você vai descobrir duas coisas:

  • O que você quer fazer já está pronto e testado;
  • É muito mais simples que parece.

Acho que neste fórum há pelo menos umas três ou quatro pessoas que são feras em AspectWerkz. Mister__M, apresente-se!

R

OK, vou dar uma olhada por aqui em AOP, assim que surgirem as dúvidas irei postando as mesmas aqui.

Muito obrigado thingol pela ajuda.

L

Olá

Achei vários links legais aqui: http://www.google.com/search?q=create+annotation+java

http://java.sun.com/j2se/1.5.0/docs/guide/apt/GettingStarted.html

http://www.oracle.com/technology/pub/articles/hunter_meta_2.html

http://today.java.net/pub/a/today/2005/07/05/IOCAnnotation.html

http://www.onjava.com/pub/a/onjava/2004/10/20/asm.html

[]s
Luca

M

thingol:
[Acho que neste fórum há pelo menos umas três ou quatro pessoas que são feras em AspectWerkz. Mister__M, apresente-se!

Eu! :slight_smile:

Ricardo, veja se algo nessa minha palestra sobre AOP com AspectWerkz te ajuda.

R

Obrigado a todos pelas repostas. Ajudou muito.
Agora mãos a obra. :stuck_out_tongue:

R

Só vim aqui para dizer que utilizei Spring AOP que as annotations funcionaram perfeitamente.

Não conhecia a orientação a aspectos e achei muito interessante.

Muito obrigado.

D

Desculpe senhores mais vc’s todos estão errados com o uso da api de reflexão é possivel verificar se
um método possui uma determinada anotação e obtê-la;

Method method = seuObjeto.getClass().getMethod(nameMethodGet,ArrayUtils.EMPTY_CLASS_ARRAY);
SuaAnnotations objAnnotations = method.getAnnotation(SuaAnnotations.class);

e verificar se objAnnotations é !=null

API de reflexão não é para menino.

Vivendo e Aprendendo.

F

dsrmf:
Desculpe senhores mais vc’s todos estão errados com o uso da api de reflexão é possivel verificar se
um método possui uma determinada anotação e obtê-la;

Method method = seuObjeto.getClass().getMethod(nameMethodGet,ArrayUtils.EMPTY_CLASS_ARRAY);
SuaAnnotations objAnnotations = method.getAnnotation(SuaAnnotations.class);

e verificar se objAnnotations é !=null

API de reflexão não é para menino.

Vivendo e Aprendendo.


AHUAHUAHUAHUAHUAHUAHUA

Convido o sr. a reler os posts para verificar que em nenhum momento foi dito que não era possível!

A intenção do Ricardo era disparar um método toda vez que determinados métodos dele fossem chamados, que é exatamente o que a orientação a aspectos faz através do uso dos pontos de junção, e portanto foi aconselhado que AOP é o melhor caminho!

Mas já que o sr. preferiu explicar COMO o Ricardo pode fazer do jeito desaconselhado (boas práticas de desenvolvimento pra quê, não é mesmo?), seja bem-vindo!

Vivendo e aprendendo…!

:wink:

M

E já que voce fez questão de upar um tópico que tava queto a 2 anos, farei questão de tranca-lo para não gerar mais discussões desse tipo.

Criado 24 de novembro de 2006
Ultima resposta 10 de nov. de 2010
Respostas 11
Participantes 7