SlideShare une entreprise Scribd logo
1  sur  22
@ 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());
              }
            }
        }
    }
}

Contenu connexe

Tendances (20)

Java Básico :: Stream
Java Básico :: StreamJava Básico :: Stream
Java Básico :: Stream
 
Java2
Java2Java2
Java2
 
Introdução a Java IO
Introdução a Java IOIntrodução a Java IO
Introdução a Java IO
 
Java 13
Java 13Java 13
Java 13
 
Curso Java Básico - Aula 03
Curso Java Básico - Aula 03Curso Java Básico - Aula 03
Curso Java Básico - Aula 03
 
Equals, Hashcode, ToString, Comparable e Comparator
Equals, Hashcode, ToString, Comparable e ComparatorEquals, Hashcode, ToString, Comparable e Comparator
Equals, Hashcode, ToString, Comparable e Comparator
 
Curso Java Básico - Aula 04
Curso Java Básico - Aula 04Curso Java Básico - Aula 04
Curso Java Básico - Aula 04
 
Curso Java Básico - Aula02
Curso Java Básico - Aula02Curso Java Básico - Aula02
Curso Java Básico - Aula02
 
Introdução ao Java 5
Introdução ao Java 5Introdução ao Java 5
Introdução ao Java 5
 
Java 15
Java 15Java 15
Java 15
 
Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)Introdução a linguagem C# (CSharp)
Introdução a linguagem C# (CSharp)
 
Java7
Java7Java7
Java7
 
Aula05
Aula05Aula05
Aula05
 
Java 16
Java 16Java 16
Java 16
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Java5
Java5Java5
Java5
 
Man UAL
Man UALMan UAL
Man UAL
 
F I C+ + L P 05
F I C+ + L P 05F I C+ + L P 05
F I C+ + L P 05
 
Orientação a Objetos em Python
Orientação a Objetos em PythonOrientação a Objetos em Python
Orientação a Objetos em Python
 
Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2Curso Básico de Java - Aula 2
Curso Básico de Java - Aula 2
 

En vedette

Type Annotations in Java 8
Type Annotations in Java 8 Type Annotations in Java 8
Type Annotations in Java 8 FinLingua, Inc.
 
Java Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner WalkthroughJava Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner WalkthroughMahfuz Islam Bhuiyan
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGZenika
 

En vedette (10)

Type Annotations in Java 8
Type Annotations in Java 8 Type Annotations in Java 8
Type Annotations in Java 8
 
Java Annotations
Java AnnotationsJava Annotations
Java Annotations
 
Java Annotation
Java AnnotationJava Annotation
Java Annotation
 
Design de RESTful APIs
Design de RESTful APIsDesign de RESTful APIs
Design de RESTful APIs
 
Java Servlets & JSP
Java Servlets & JSPJava Servlets & JSP
Java Servlets & JSP
 
JSP
JSPJSP
JSP
 
Java Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner WalkthroughJava Annotation Processing: A Beginner Walkthrough
Java Annotation Processing: A Beginner Walkthrough
 
Java Server Pages
Java Server PagesJava Server Pages
Java Server Pages
 
Annotations in Java
Annotations in JavaAnnotations in Java
Annotations in Java
 
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUGConférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
 

Similaire à Como processar anotações em Java

Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)Armando Daniel
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Tchelinux
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosMoises Omena
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVAWillian Magalhães
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.pptEmerson Cardoso
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com javaMaurício Linhares
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – IIIGabriel Faustino
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javJulio Viegas
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003elliando dias
 
Java Desktop
Java DesktopJava Desktop
Java Desktopciceroclc
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao javaArmando Daniel
 

Similaire à Como processar anotações em Java (20)

Java orientação a objetos (variaveis de instancia e metodos)
Java   orientação a objetos (variaveis de instancia e metodos)Java   orientação a objetos (variaveis de instancia e metodos)
Java orientação a objetos (variaveis de instancia e metodos)
 
Aula4
Aula4Aula4
Aula4
 
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
Refatoração e Boas Práticas no Desenvolvimento de Software com a Linguagem Ja...
 
Aula5
Aula5Aula5
Aula5
 
Java - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a ObjetosJava - Aula 2 - Orientado a Objetos
Java - Aula 2 - Orientado a Objetos
 
Doctrine2 Seminário PHP
Doctrine2 Seminário PHPDoctrine2 Seminário PHP
Doctrine2 Seminário PHP
 
String
StringString
String
 
Lambda Expressions
Lambda ExpressionsLambda Expressions
Lambda Expressions
 
Algoritmos Aula 03
Algoritmos Aula 03Algoritmos Aula 03
Algoritmos Aula 03
 
Desenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVADesenvolvendo para WEB com JAVA
Desenvolvendo para WEB com JAVA
 
Java aprendendo linguagem.ppt
Java aprendendo linguagem.pptJava aprendendo linguagem.ppt
Java aprendendo linguagem.ppt
 
Curso java 01 - molhando os pés com java
Curso java   01 - molhando os pés com javaCurso java   01 - molhando os pés com java
Curso java 01 - molhando os pés com java
 
Programação orientada a objetos – III
Programação orientada a objetos – IIIProgramação orientada a objetos – III
Programação orientada a objetos – III
 
Ecosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_javEcosistema spring a_plataforma_enterprise_jav
Ecosistema spring a_plataforma_enterprise_jav
 
introdução a linguagem java-2003
introdução a linguagem java-2003introdução a linguagem java-2003
introdução a linguagem java-2003
 
Java Desktop
Java DesktopJava Desktop
Java Desktop
 
Notas Java
Notas JavaNotas Java
Notas Java
 
Aula5
Aula5Aula5
Aula5
 
Java8
Java8Java8
Java8
 
Java introdução ao java
Java   introdução ao javaJava   introdução ao java
Java introdução ao java
 

Plus de Natanael Fonseca

Microservices With Istio Service Mesh
Microservices With Istio Service MeshMicroservices With Istio Service Mesh
Microservices With Istio Service MeshNatanael Fonseca
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixNatanael Fonseca
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Natanael Fonseca
 
Desafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidDesafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidNatanael Fonseca
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)Natanael Fonseca
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma AndroidNatanael Fonseca
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509Natanael Fonseca
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509Natanael Fonseca
 
Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Natanael Fonseca
 
Introdução a criptografia
Introdução a criptografiaIntrodução a criptografia
Introdução a criptografiaNatanael Fonseca
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring FrameworkNatanael Fonseca
 
Validação de certificados digitais
Validação de certificados digitaisValidação de certificados digitais
Validação de certificados digitaisNatanael Fonseca
 

Plus de Natanael Fonseca (14)

Microservices With Istio Service Mesh
Microservices With Istio Service MeshMicroservices With Istio Service Mesh
Microservices With Istio Service Mesh
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Curso Java Básico - Aula 05
Curso Java Básico - Aula 05Curso Java Básico - Aula 05
Curso Java Básico - Aula 05
 
Desafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma AndroidDesafios de projeto para quem usa a plataforma Android
Desafios de projeto para quem usa a plataforma Android
 
Fragmentos
FragmentosFragmentos
Fragmentos
 
Atividades e Intenções (Android)
Atividades e Intenções (Android)Atividades e Intenções (Android)
Atividades e Intenções (Android)
 
Introdução à plataforma Android
Introdução à plataforma AndroidIntrodução à plataforma Android
Introdução à plataforma Android
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
 
Certificados Digitais x509
Certificados Digitais x509Certificados Digitais x509
Certificados Digitais x509
 
Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)Infra Estrutura de Chaves Publicas(PKI)
Infra Estrutura de Chaves Publicas(PKI)
 
Introdução a criptografia
Introdução a criptografiaIntrodução a criptografia
Introdução a criptografia
 
Transações em EJB
Transações em EJBTransações em EJB
Transações em EJB
 
Introdução ao Spring Framework
Introdução ao Spring FrameworkIntrodução ao Spring Framework
Introdução ao Spring Framework
 
Validação de certificados digitais
Validação de certificados digitaisValidação de certificados digitais
Validação de certificados digitais
 

Como processar anotações em Java

  • 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()); } } } } }