Foto tirada no falando em Java 2009 Quem nunca viu um @annotation em algum codigo java que atire a primeira pedra. O Annotation surgiu na versao 5 do JDK(codename Tiger) e o cara responsavel pela JSR do annotation e o Alex Buckley da Sun MicroSystems. Annotation sao metadados e possui a caracteristica de anotar elementos em Java para adicionar comportamentos a interfaces, classes, metodos, atributos, enum, parametros, construtores e etc, para serem processados de forma especial pelo compilador, IDEs, ferramentas de deploy ou em tempo de execucao. Definicao pela Wikipedia. Existem annotations muito utilizados quando programamos, por exemplo, @Deprecated, @SuppressWarning, @Override, @Inherited entre outras, A sintaxe para implementar um annotation e similar a de uma Interface, com uma diferenca de um arroba ( @ ) antes da palavra chave interface. public @interface Vjr { } Quando se vai criar a interface de um annotation e importante definir outros seguintes annotations: @Retention, que aceita um unico valor Enumetation do tipo RetentionPolicy que informa ao compilador em que ponto o annotation e descartado. Possuindo tres possiveis valores: SOURCE: Os annotations serao ignorados pelo compilador. CLASS: Annotations serao adicionados ao arquivo .class, mas que nao e necessario ser guardado na memoria da VM em tempo de execucao. RUNTIME: Annotation tambem e adicionado ao .class pelo compilador e e guardada na memoria da VM e podem ser lidos utilizando Reflection. @Target, aceita um unico elemento ElementType indica o tipo de elemento do programa sera aplicado o annotation. Podendo ser aplicados a interface, classes(TYPE), atributos(FIELD), metodos(METHOD), parametros(PARAMETER), construtores(CONSTRUCTOR), annotations(ANNOTATION_TYPE), pacotes(PACKAGE) e para minha surpresa variaveis locais(LOCAL_VARIABLE). Caso nao seja especificado nenhum valor para Target, o annotation podera ser utilizado em todos os elementos do programa. O annotation e capaz de definir valores default para um atributo caso nao seja declarado com a palavra chave default. Um exemplo basico de um annotation: @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Vjr { String getSiteDefault() default www.valdemarjr.net; String getBlogDefault(); } Nos annotations sao declarados os metodos, que podem nao possuir parametros, que definem os membros do annotation. Mas quando se definem Annotations existem algumas restricoes: Um annotation nao pode estender outro annotation. O retorno dos metodos declarados em um annotation tem que ser: String, class, tipo enum, annotation ou um array desses tipos anteriores. Nao pode lancar excecoes, ter a clausula throws. Nao podem se referenciar ou nem ter referencia ciclica. As vantagens e de evitar duplicacao de codigo, deixar implicito algumas funcionalidades que os desenvolvedores nao precisam saber, apenas utilizar. Por exemplo com EJB 3.0 podemos definir interfaces remotas e implementacao de EJB remotos com apenas um annotation para cada classe, onde antes era preciso configurar arquivos xml gigantes e confusos para dar manutencao. Muitos desenvolvedores, inclusive eu, nunca desenvolveram seu proprio annotation, mas isso sera um assunto para um proximo post. Participei pela primeira vez da terceira edicao do falando em java 2009 organizado pela Caelum. Tivemos a presenca de Jim Webber da ThoughtWorks. Teriamos a presenca tambem de Bill Burke, mas devidos a problemas de visto, nao compareceu ao vento, mas que foi muito bem preenchido a vaga com outra