@Annotation em acima de tudo
Autor: Valdemar Júnior | Publicado: 2009-05-09T21:22:00-03:00

   Quem nunca viu um @annotation em algum código java que atire a primeira pedra. O Annotation surgiu na versão 5 do JDK(codename Tiger) e o cara responsável pela JSR do annotation é o Alex Buckley da Sun MicroSystems.    Annotation são metadados e possui a característica de anotar elementos em Java para adicionar comportamentos a interfaces, classes, métodos, atributos, enum, parâmetros, construtores e etc, para serem processados de forma especial pelo compilador, IDEs, ferramentas de deploy ou em tempo de execução. Definição pela Wikipedia.  &#160;  Existem annotations muito utilizados quando programamos, por exemplo, @Deprecated, @SuppressWarning, @Override, @Inherited entre outras,&#160; A sintaxe para implementar um annotation é similar a de uma Interface, com uma diferença de um arroba ( @ ) antes da palavra chave interface.    public @interface Vjr { }  &#160;  Quando se vai criar a interface de um annotation é importante definir outros seguintes annotations:  @Retention, que aceita um único valor Enumetation do tipo RetentionPolicy que informa ao compilador em que ponto o annotation é descartado. Possuindo três possíveis valores:     SOURCE: Os annotations serão ignorados pelo compilador.       CLASS: Annotations serão adicionados ao arquivo .class, mas que não é necessário ser guardado na memória da VM em tempo de execução.       RUNTIME: Annotation também é adicionado ao .class pelo compilador e é guardada na memória da VM e podem ser lidos utilizando Reflection.   @Target, aceita um único elemento ElementType indica o tipo de elemento do programa será aplicado o annotation. Podendo ser aplicados a interface, classes(TYPE), atributos(FIELD), métodos(METHOD), parâmetros(PARAMETER), construtores(CONSTRUCTOR), annotations(ANNOTATION_TYPE), pacotes(PACKAGE) e para minha surpresa variáveis locais(LOCAL_VARIABLE). Caso não seja especificado nenhum valor para Target, o annotation poderá ser utilizado em todos os elementos do programa.  &#160;  O annotation é capaz de definir valores default para um atributo caso não seja declarado com a palavra chave default. Um exemplo básico de um annotation:  &#160;  @Retention(RetentionPolicy.RUNTIME)     @Target(ElementType.METHOD)     public @interface Vjr {     &#160;&#160;&#160;&#160;&#160;&#160;&#160; String getSiteDefault() default ”www.valdemarjr.net”;     &#160;&#160;&#160;&#160;&#160;&#160;&#160; String getBlogDefault();      }  Nos annotations são declarados os métodos, que podem não possuir parametros, que definem os membros do annotation. Mas quando se definem Annotations existem algumas restrições:          Um annotation não pode estender outro annotation.              O retorno dos métodos declarados em um annotation tem que ser: String, class, tipo enum, annotation ou um array desses tipos anteriores.             Não pode lançar exceções, ter a cláusula throws.              Não podem se referenciar ou nem ter referência cíclica.             As vantagens é de evitar duplicação de código, deixar implícito algumas funcionalidades que os desenvolvedores não precisam saber, apenas utilizar. Por exemplo com EJB 3.0 podemos definir interfaces remotas e implementação de EJB remotos com apenas um annotation para cada classe, onde antes era preciso configurar arquivos xml gigantes e confusos para dar manutenção.   &#160;  Muitos desenvolvedores, inclusive eu, nunca desenvolveram seu próprio annotation, mas isso será um assunto para um próximo post.