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

PPTX
Java: Manipulação de Arquivos
PPTX
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
PDF
Java e orientação a objetos - aula 01
PDF
Ficha javacc
PDF
7194099-Manual-de-Java
PPTX
Curso Java Básico - Aula 01
PPT
Linguagens de programação 12º M12
PPT
Linguagens de programação 12º M11
Java: Manipulação de Arquivos
Programação Orientada a Objetos - Conceitos básicos da linguagem JAVA
Java e orientação a objetos - aula 01
Ficha javacc
7194099-Manual-de-Java
Curso Java Básico - Aula 01
Linguagens de programação 12º M12
Linguagens de programação 12º M11

Mais procurados (20)

PPT
Java Básico :: Stream
PDF
Introdução a Java IO
PPTX
Curso Java Básico - Aula 03
PPTX
Equals, Hashcode, ToString, Comparable e Comparator
PPTX
Curso Java Básico - Aula 04
PPTX
Curso Java Básico - Aula02
PPT
Introdução ao Java 5
PPTX
Introdução a linguagem C# (CSharp)
PPTX
PPT
Integração de Tecnologias
PDF
Man UAL
PDF
F I C+ + L P 05
PDF
Orientação a Objetos em Python
PPTX
Curso Básico de Java - Aula 2
Java Básico :: Stream
Introdução a Java IO
Curso Java Básico - Aula 03
Equals, Hashcode, ToString, Comparable e Comparator
Curso Java Básico - Aula 04
Curso Java Básico - Aula02
Introdução ao Java 5
Introdução a linguagem C# (CSharp)
Integração de Tecnologias
Man UAL
F I C+ + L P 05
Orientação a Objetos em Python
Curso Básico de Java - Aula 2
Anúncio

Destaque (10)

PPTX
Type Annotations in Java 8
PPTX
Java Annotations
PPT
Java Annotation
PDF
Design de RESTful APIs
DOC
Java Servlets & JSP
PPT
PDF
Java Annotation Processing: A Beginner Walkthrough
PPT
Java Server Pages
PPTX
Annotations in Java
PDF
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Type Annotations in Java 8
Java Annotations
Java Annotation
Design de RESTful APIs
Java Servlets & JSP
Java Annotation Processing: A Beginner Walkthrough
Java Server Pages
Annotations in Java
Conférence sur les annotations Java par Olivier Croisier (Zenika) au Paris JUG
Anúncio

Semelhante a Java annotation (18)

PDF
Spring framework 2.5
ODP
Anotações do mapeamento OR
ODP
Construção de Frameworks com Annotation e Reflection API em Java
PDF
Ecosistema spring a_plataforma_enterprise_jav
DOCX
Exercicios professor marcos monteiro (1)
PPTX
Linguagem de programação implementação de classes
PPTX
Introdução à Metaprogramação com Java Reflection API
PDF
[Curso Java Basico] Aula 65: Annotations (anotacoes)
DOCX
04 modelagem classes
PDF
PPT
Classes e Objectos JAVA
ODP
Mapeamento de herança OR
PDF
Aula 3 - Java Prof.ª Cristiane Fidelix
PPT
Aop Aspect J 1.5.4 Capitulo 02
PPTX
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
PDF
java_avancado.pdf
PPT
Introdução à análise orientada a objetos parte 1
PPT
Introdução à análise orientada a objetos parte 1
Spring framework 2.5
Anotações do mapeamento OR
Construção de Frameworks com Annotation e Reflection API em Java
Ecosistema spring a_plataforma_enterprise_jav
Exercicios professor marcos monteiro (1)
Linguagem de programação implementação de classes
Introdução à Metaprogramação com Java Reflection API
[Curso Java Basico] Aula 65: Annotations (anotacoes)
04 modelagem classes
Classes e Objectos JAVA
Mapeamento de herança OR
Aula 3 - Java Prof.ª Cristiane Fidelix
Aop Aspect J 1.5.4 Capitulo 02
Estrutura de Dados em Java (Introdução à Programação Orientada a Objetos)
java_avancado.pdf
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1

Mais de Natanael Fonseca (14)

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

Último (16)

PPTX
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
PPTX
Arquitetura de computadores - Memórias Secundárias
PDF
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PDF
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
PPTX
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
PDF
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PDF
COBITxITIL-Entenda as diferença em uso governança TI
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PDF
Processos na gestão de transportes, TM100 Col18
Informática Aplicada Informática Aplicada Plano de Ensino - estudo de caso NR...
Arquitetura de computadores - Memórias Secundárias
Termos utilizados na designação de relação entre pessoa e uma obra.pdf
Custos e liquidação no SAP Transportation Management, TM130 Col18
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Fullfilment AI - Forum ecommerce 2025 // Distrito e Total Express
Como-se-implementa-um-softwareeeeeeeeeeeeeeeeeeeeeeeee.pptx
Gestão de transportes básica no SAP S/4HANA, S4611 Col20
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
COBITxITIL-Entenda as diferença em uso governança TI
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Processos na gestão de transportes, TM100 Col18

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