SlideShare uma empresa Scribd logo
@ Annotations

Natanael Fonseca
Arquiteto de Software
Conceito

Adicionam “metadados” que não interferem
diretamente no código anotado, mas que
podem ser utilizadas posteriormente para
obter informações relevantes.

Exemplo:
   • @Override
   • @SuppressWarnings
Diferentes usos
• Fornecer informações para o compilador:
     Anotações podem ser utilizadas pelo compilador para detectar errors ou suprimir
     warnings.

• Compiler-time and deployment-time processing

     Alguns “Software tools” podem processar anotações para gerar código, gerar XML,
     realizar validações em campos e etc.


• Processamento em Runtime

     Algumas anotações estão disponíveis para serem processadas em Runtime.
Usadas pelo Compilador
• @Deprecated
    Indica que o elemento marcado está "depreciado" e não deveria mais ser utilizado.
    O compilador gera um "warning" quando você utiliza um método que possui esta
    anotação.

• @Override

    Informa ao compilador que o elemento está sobrescrevendo um outros elemento
    declarado na superclasse.


• @SuppressWarnings

    Diz ao compilador para suprimir especificos "warnings" que poderiam ser gerados.
Criando suas próprias anotações
Segue a mesma regra de criação de uma
interface, mas coloca-se simbolo “@” antes da
palavra chave “interface”.
  Ex:

 public @interface MyAnnotation {
 }
Algumas Regras
• A declaração dos métodos não deveriam ter
  quaisquer parâmetros, não deveriam lançar
  quaisquer exceções e o tipo de retorno deve ser
  um dos seguintes:

  –   Primitivos;
  –   String;
  –   Class;
  –   Enum;
  –   Array de um dos tipos acima.
Meta-Annotation
Conhecidas como Anotação de anotação e
servem para definir o comportamento da
anotação sendo criada, são elas:

  – Target
  – Retention
  – Documented
  – Inherited
@Target
Indica em qual elemento da classe a anotação pode ser aplicada:

• @Target(ElementType.TYPE) - Pode ser aplicado a qualquer elemento da
  classe;
• @Target(ElementType.FIELD) - Pode ser aplicado a um campo ou
  propriedade;
• @Target(ElementType.METHOD)- Pode ser aplicado a um método;
• @Target(ElementType.PARAMETER) - Pode ser aplicado a parâmetros de
  um método;
• @Target(ElementType.CONSTRUCTOR) - Pode ser aplicado a contrutores;
• @Target(ElementType.LOCAL_VARIABLE) - Pode ser aplicado a variáveis
  locais;
• @Target(ElementType.ANNOTATION_TYPE) - Indica que o próprio tipo
  declarado é um anotação de anotação;
@Retention
Indica onde e quanto tempo as anotações deste
tipo serão obtidas, pode possuir três valores :

• RetentionPolicy.SOURCE – Serão obtidas
  somente em nível de fonte e serão ignoradas pelo
  compilador;
• RetentionPolicy.CLASS—Serão obtidas apenas
  em nível de compilação pelo compilador e serão
  ignoradas pela VM;
• RetentionPolicy.RUNTIME— Obtidas pela VM e
  Serão lidas apenas em runtime;
@Documented e @Inherited

@Documented: Indica se a anotação pertencerá ao
javadoc ou algum outro gerador de documentação
por padrão;

@Inherited: Indica se a anotação será herdada
pelas subclasses automaticamente, sendo assim,
Caso haja uma consulta procurando por uma
anotação qualquer, se a classe consultada não
possuir a anotação a classe pai será consultada por
padrão.
Exemplo
          @MyAnnotation em nível de Classe


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {
  public String name();
  public String value();
}
Exemplo
             @MyAnnotation em nível de classe


@MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa")
public class Pessoa {

    private String nome;
    private String telefone;

    public Pessoa() {
    }

}
Como processar
                    @MyAnnotation em nível de classe
public static void main(String[] args) {

     Class aClass = Pessoa.class;

     Annotation[] annotations = aClass.getAnnotations();

     for (Annotation annotation : annotations) {
       if (annotation instanceof MyAnnotation) {
           MyAnnotation myAnnotation = (MyAnnotation) annotation;
           System.out.println("name: " + myAnnotation.name());
           System.out.println("value: " + myAnnotation.value());
       }
     }

 }
Exemplo
         @MyAnnotation em nível de campo


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType. FIELD)
public @interface MyAnnotation {
  public String name();
  public String value();
}
Exemplo
              @MyAnnotation em nível de campo


public class Pessoa {

    @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa")
    public String nome;
    private String telefone;

}
Como Processar
                        @MyAnnotation em nível de Campo
public static void main(String[] args) {

Class aClass = Pessoa.class;

    Field[] fields = aClass.getFields();                               Obtém os campos públicos da classe,
                                                                       Sendo assim, somente campos públicos
    System.out.print(" Field" + fields.length );
                                                                       Serão lidos desta forma.
    for (Field field : fields) {

        System.out.print(" Field" + field.getName() );

        Annotation[] annotations = field.getDeclaredAnnotations();

        for (Annotation annotation : annotations) {
          if (annotation instanceof MyAnnotation) {
              MyAnnotation myAnnotation = (MyAnnotation) annotation;
              System.out.println("name: " + myAnnotation.name());
              System.out.println("value: " + myAnnotation.value());
          }
        }

    }
}
Exemplo
         @MyAnnotation em nível de método


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType. METHOD)
public @interface MyAnnotation {
  public String name();
  public String value();
}
Exemplo
             @MyAnnotation em nível de método


public class Pessoa {

    @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa")
    public void exibirMsg(){
    }

}
Como Processar
                     @MyAnnotation em nível de método
public static void main(String[] args) {

Class aClass = Pessoa.class;

    Method[] metodos = aClass.getMethods();                            Obtém os métodos públicos da classe
    for (Method method : metodos) {

        Annotation[] annotations = method.getDeclaredAnnotations();

        for (Annotation annotation : annotations) {
          if (annotation instanceof MyAnnotation) {
              MyAnnotation myAnnotation = (MyAnnotation) annotation;
              System.out.println("name: " + myAnnotation.name());
              System.out.println("value: " + myAnnotation.value());
          }
        }

    }

}
Exemplo
       @MyAnnotation em nível de parâmetro


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType. PARAMETER)
public @interface MyAnnotation {
  public String name();
  public String value();
}
Exemplo
            @MyAnnotation em nível de parâmetro


public class Pessoa {

    public String exibirPessoaConcatenandoCom(
                             @MyAnnotation(name="Ola", value="Beleza")
                             String palavra
                            ){
      return "";
    }
}
Como Processar
                      @MyAnnotation em nível de parâmetro
public static void main(String[] args) {

Class aClass = Pessoa.class;

    Method[] methods = aClass.getMethods();
                                                                                  De cada método, obtém as anotações
    for (Method method : methods) {                                               aplicadas
        Annotation[][] parameterAnnotations = method.getParameterAnnotations();
        Class[] parameterTypes = method.getParameterTypes();

        int i = 0;
        for (Annotation[] annotations : parameterAnnotations) {
          Class parameterType = parameterTypes[i++];

            for (Annotation annotation : annotations) {
              if (annotation instanceof MyAnnotation) {
                 MyAnnotation myAnnotation = (MyAnnotation) annotation;
                 System.out.println("param: " + parameterType.getName());
                 System.out.println("name : " + myAnnotation.name());
                 System.out.println("value: " + myAnnotation.value());
              }
            }
        }
    }
}

Mais conteúdo relacionado

Mais procurados (20)

PPT
Java Básico :: Stream
Wesley R. Bezerra
 
PDF
Introdução a Java IO
rdgse
 
PPTX
Curso Java Básico - Aula 03
Natanael Fonseca
 
PPTX
Equals, Hashcode, ToString, Comparable e Comparator
Rodrigo Cascarrolho
 
PPTX
Curso Java Básico - Aula 04
Natanael Fonseca
 
PPTX
Curso Java Básico - Aula02
Natanael Fonseca
 
PPT
Introdução ao Java 5
Maurício Linhares
 
PPTX
Introdução a linguagem C# (CSharp)
Marcos Castro
 
PPTX
Aula05
Natanael Fonseca
 
PPT
Integração de Tecnologias
elliando dias
 
PDF
Man UAL
Fran Teixeira
 
PDF
F I C+ + L P 05
t34m0nana
 
PDF
Orientação a Objetos em Python
Luciano Ramalho
 
PPTX
Curso Básico de Java - Aula 2
PeslPinguim
 
Java Básico :: Stream
Wesley R. Bezerra
 
Introdução a Java IO
rdgse
 
Curso Java Básico - Aula 03
Natanael Fonseca
 
Equals, Hashcode, ToString, Comparable e Comparator
Rodrigo Cascarrolho
 
Curso Java Básico - Aula 04
Natanael Fonseca
 
Curso Java Básico - Aula02
Natanael Fonseca
 
Introdução ao Java 5
Maurício Linhares
 
Introdução a linguagem C# (CSharp)
Marcos Castro
 
Integração de Tecnologias
elliando dias
 
Man UAL
Fran Teixeira
 
F I C+ + L P 05
t34m0nana
 
Orientação a Objetos em Python
Luciano Ramalho
 
Curso Básico de Java - Aula 2
PeslPinguim
 

Destaque (10)

PPTX
Type Annotations in Java 8
FinLingua, Inc.
 
PPTX
Java Annotations
Serhii Kartashov
 
PPT
Java Annotation
karthik.tech123
 
PDF
Design de RESTful APIs
Fernando Camargo
 
DOC
Java Servlets & JSP
Manjunatha RK
 
PPT
JSP
vikram singh
 
PDF
Java Annotation Processing: A Beginner Walkthrough
Mahfuz Islam Bhuiyan
 
PPT
Java Server Pages
BG Java EE Course
 
PPTX
Annotations in Java
Kirill Kulakov
 
PDF
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Zenika
 
Type Annotations in Java 8
FinLingua, Inc.
 
Java Annotations
Serhii Kartashov
 
Java Annotation
karthik.tech123
 
Design de RESTful APIs
Fernando Camargo
 
Java Servlets & JSP
Manjunatha RK
 
Java Annotation Processing: A Beginner Walkthrough
Mahfuz Islam Bhuiyan
 
Java Server Pages
BG Java EE Course
 
Annotations in Java
Kirill Kulakov
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Zenika
 
Anúncio

Semelhante a Java annotation (20)

PDF
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
PPT
Módulo 3 - Estrutura sequencial.ppt
ruanmigueldrdg
 
PPT
Aula4
fkimura
 
PDF
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Tchelinux
 
PPT
Aula5
softeam
 
PDF
Java - Aula 2 - Orientado a Objetos
Moises Omena
 
PDF
Doctrine2 Seminário PHP
Guilherme Blanco
 
PPT
Lambda Expressions
Charles Fortes
 
PPT
Algoritmos Aula 03
IBTA Turma de TI 2009
 
PPTX
Desenvolvendo para WEB com JAVA
Willian Magalhães
 
PDF
Java aprendendo linguagem.ppt
Emerson Cardoso
 
PPTX
Curso java 01 - molhando os pés com java
Maurício Linhares
 
PDF
Programação orientada a objetos – III
Gabriel Faustino
 
PDF
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
PPT
introdução a linguagem java-2003
elliando dias
 
PPT
Java Desktop
ciceroclc
 
DOCX
Notas Java
Júlio Machado
 
PPT
Aula5
fkimura
 
Java orientação a objetos (variaveis de instancia e metodos)
Armando Daniel
 
Módulo 3 - Estrutura sequencial.ppt
ruanmigueldrdg
 
Aula4
fkimura
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Tchelinux
 
Aula5
softeam
 
Java - Aula 2 - Orientado a Objetos
Moises Omena
 
Doctrine2 Seminário PHP
Guilherme Blanco
 
Lambda Expressions
Charles Fortes
 
Algoritmos Aula 03
IBTA Turma de TI 2009
 
Desenvolvendo para WEB com JAVA
Willian Magalhães
 
Java aprendendo linguagem.ppt
Emerson Cardoso
 
Curso java 01 - molhando os pés com java
Maurício Linhares
 
Programação orientada a objetos – III
Gabriel Faustino
 
Ecosistema spring a_plataforma_enterprise_jav
Julio Viegas
 
introdução a linguagem java-2003
elliando dias
 
Java Desktop
ciceroclc
 
Notas Java
Júlio Machado
 
Aula5
fkimura
 
Anúncio

Mais de Natanael Fonseca (14)

PPTX
Microservices With Istio Service Mesh
Natanael Fonseca
 
PPTX
Microservices com Spring Boot e Spring Cloud Netflix
Natanael Fonseca
 
PPTX
Curso Java Básico - Aula 05
Natanael Fonseca
 
PPTX
Desafios de projeto para quem usa a plataforma Android
Natanael Fonseca
 
PPTX
Fragmentos
Natanael Fonseca
 
PPTX
Atividades e Intenções (Android)
Natanael Fonseca
 
PPTX
Introdução à plataforma Android
Natanael Fonseca
 
PPTX
Certificados Digitais x509
Natanael Fonseca
 
PPTX
Certificados Digitais x509
Natanael Fonseca
 
PPTX
Infra Estrutura de Chaves Publicas(PKI)
Natanael Fonseca
 
PPTX
Introdução a criptografia
Natanael Fonseca
 
PPT
Transações em EJB
Natanael Fonseca
 
KEY
Introdução ao Spring Framework
Natanael Fonseca
 
PPT
Validação de certificados digitais
Natanael Fonseca
 
Microservices With Istio Service Mesh
Natanael Fonseca
 
Microservices com Spring Boot e Spring Cloud Netflix
Natanael Fonseca
 
Curso Java Básico - Aula 05
Natanael Fonseca
 
Desafios de projeto para quem usa a plataforma Android
Natanael Fonseca
 
Fragmentos
Natanael Fonseca
 
Atividades e Intenções (Android)
Natanael Fonseca
 
Introdução à plataforma Android
Natanael Fonseca
 
Certificados Digitais x509
Natanael Fonseca
 
Certificados Digitais x509
Natanael Fonseca
 
Infra Estrutura de Chaves Publicas(PKI)
Natanael Fonseca
 
Introdução a criptografia
Natanael Fonseca
 
Transações em EJB
Natanael Fonseca
 
Introdução ao Spring Framework
Natanael Fonseca
 
Validação de certificados digitais
Natanael Fonseca
 

Último (7)

PPTX
Gestão de Mudanças - O que é e como é implementada
Gateware Group
 
PPTX
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
PDF
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
PDF
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
PPTX
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
PPTX
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
PPTX
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 
Gestão de Mudanças - O que é e como é implementada
Gateware Group
 
Desenvolvimento-de-Produtos-Inovadores.pptx
ssuser1d7565
 
Explorando o Futuro do Corpo: Implantes Neurais e o Biohacking dos Sentidos
cooperliora
 
Certificado em Redes Neurais Artificiais em Python
CaioSilva506151
 
Gestão de Mudanças - Fases do processo de mudança organizacional
Gateware Group
 
Computacao-e-Tecnologias-Digitais-Por-Que-Aprender.pptx
RobertaOliveiradaFon1
 
Gestão de Mudanças - Os maiores desafios da Gestão de Mudanças e Gestão de Pr...
Gateware Group
 

Java annotation

  • 2. Conceito Adicionam “metadados” que não interferem diretamente no código anotado, mas que podem ser utilizadas posteriormente para obter informações relevantes. Exemplo: • @Override • @SuppressWarnings
  • 3. Diferentes usos • Fornecer informações para o compilador: Anotações podem ser utilizadas pelo compilador para detectar errors ou suprimir warnings. • Compiler-time and deployment-time processing Alguns “Software tools” podem processar anotações para gerar código, gerar XML, realizar validações em campos e etc. • Processamento em Runtime Algumas anotações estão disponíveis para serem processadas em Runtime.
  • 4. Usadas pelo Compilador • @Deprecated Indica que o elemento marcado está "depreciado" e não deveria mais ser utilizado. O compilador gera um "warning" quando você utiliza um método que possui esta anotação. • @Override Informa ao compilador que o elemento está sobrescrevendo um outros elemento declarado na superclasse. • @SuppressWarnings Diz ao compilador para suprimir especificos "warnings" que poderiam ser gerados.
  • 5. Criando suas próprias anotações Segue a mesma regra de criação de uma interface, mas coloca-se simbolo “@” antes da palavra chave “interface”. Ex: public @interface MyAnnotation { }
  • 6. Algumas Regras • A declaração dos métodos não deveriam ter quaisquer parâmetros, não deveriam lançar quaisquer exceções e o tipo de retorno deve ser um dos seguintes: – Primitivos; – String; – Class; – Enum; – Array de um dos tipos acima.
  • 7. Meta-Annotation Conhecidas como Anotação de anotação e servem para definir o comportamento da anotação sendo criada, são elas: – Target – Retention – Documented – Inherited
  • 8. @Target Indica em qual elemento da classe a anotação pode ser aplicada: • @Target(ElementType.TYPE) - Pode ser aplicado a qualquer elemento da classe; • @Target(ElementType.FIELD) - Pode ser aplicado a um campo ou propriedade; • @Target(ElementType.METHOD)- Pode ser aplicado a um método; • @Target(ElementType.PARAMETER) - Pode ser aplicado a parâmetros de um método; • @Target(ElementType.CONSTRUCTOR) - Pode ser aplicado a contrutores; • @Target(ElementType.LOCAL_VARIABLE) - Pode ser aplicado a variáveis locais; • @Target(ElementType.ANNOTATION_TYPE) - Indica que o próprio tipo declarado é um anotação de anotação;
  • 9. @Retention Indica onde e quanto tempo as anotações deste tipo serão obtidas, pode possuir três valores : • RetentionPolicy.SOURCE – Serão obtidas somente em nível de fonte e serão ignoradas pelo compilador; • RetentionPolicy.CLASS—Serão obtidas apenas em nível de compilação pelo compilador e serão ignoradas pela VM; • RetentionPolicy.RUNTIME— Obtidas pela VM e Serão lidas apenas em runtime;
  • 10. @Documented e @Inherited @Documented: Indica se a anotação pertencerá ao javadoc ou algum outro gerador de documentação por padrão; @Inherited: Indica se a anotação será herdada pelas subclasses automaticamente, sendo assim, Caso haja uma consulta procurando por uma anotação qualquer, se a classe consultada não possuir a anotação a classe pai será consultada por padrão.
  • 11. Exemplo @MyAnnotation em nível de Classe @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface MyAnnotation { public String name(); public String value(); }
  • 12. Exemplo @MyAnnotation em nível de classe @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa") public class Pessoa { private String nome; private String telefone; public Pessoa() { } }
  • 13. Como processar @MyAnnotation em nível de classe public static void main(String[] args) { Class aClass = Pessoa.class; Annotation[] annotations = aClass.getAnnotations(); for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } }
  • 14. Exemplo @MyAnnotation em nível de campo @Retention(RetentionPolicy.RUNTIME) @Target(ElementType. FIELD) public @interface MyAnnotation { public String name(); public String value(); }
  • 15. Exemplo @MyAnnotation em nível de campo public class Pessoa { @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa") public String nome; private String telefone; }
  • 16. Como Processar @MyAnnotation em nível de Campo public static void main(String[] args) { Class aClass = Pessoa.class; Field[] fields = aClass.getFields(); Obtém os campos públicos da classe, Sendo assim, somente campos públicos System.out.print(" Field" + fields.length ); Serão lidos desta forma. for (Field field : fields) { System.out.print(" Field" + field.getName() ); Annotation[] annotations = field.getDeclaredAnnotations(); for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } } }
  • 17. Exemplo @MyAnnotation em nível de método @Retention(RetentionPolicy.RUNTIME) @Target(ElementType. METHOD) public @interface MyAnnotation { public String name(); public String value(); }
  • 18. Exemplo @MyAnnotation em nível de método public class Pessoa { @MyAnnotation(name="Natanael Fonseca", value="Qualquer coisa") public void exibirMsg(){ } }
  • 19. Como Processar @MyAnnotation em nível de método public static void main(String[] args) { Class aClass = Pessoa.class; Method[] metodos = aClass.getMethods(); Obtém os métodos públicos da classe for (Method method : metodos) { Annotation[] annotations = method.getDeclaredAnnotations(); for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("name: " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } } }
  • 20. Exemplo @MyAnnotation em nível de parâmetro @Retention(RetentionPolicy.RUNTIME) @Target(ElementType. PARAMETER) public @interface MyAnnotation { public String name(); public String value(); }
  • 21. Exemplo @MyAnnotation em nível de parâmetro public class Pessoa { public String exibirPessoaConcatenandoCom( @MyAnnotation(name="Ola", value="Beleza") String palavra ){ return ""; } }
  • 22. Como Processar @MyAnnotation em nível de parâmetro public static void main(String[] args) { Class aClass = Pessoa.class; Method[] methods = aClass.getMethods(); De cada método, obtém as anotações for (Method method : methods) { aplicadas Annotation[][] parameterAnnotations = method.getParameterAnnotations(); Class[] parameterTypes = method.getParameterTypes(); int i = 0; for (Annotation[] annotations : parameterAnnotations) { Class parameterType = parameterTypes[i++]; for (Annotation annotation : annotations) { if (annotation instanceof MyAnnotation) { MyAnnotation myAnnotation = (MyAnnotation) annotation; System.out.println("param: " + parameterType.getName()); System.out.println("name : " + myAnnotation.name()); System.out.println("value: " + myAnnotation.value()); } } } } }