Explorando a API Optional no Java
em 14 de Janeiro de 2025
As anotações no Java são um mecanismo poderoso para adicionar metadados ao código. Elas fornecem informações adicionais que podem ser usadas em tempo de compilação, execução ou por ferramentas externas para realizar tarefas específicas, como validações, configurações ou geração de código. Introduzidas no Java 5, as anotações são amplamente utilizadas em frameworks como Spring, Hibernate e JUnit.
Neste artigo, exploraremos o conceito de anotações, seus tipos, usos comuns e como criar suas próprias anotações personalizadas.
Estrutura de uma Anotação
Uma anotação é precedida pelo símbolo @
e pode ser aplicada a classes, métodos, campos, parâmetros, entre outros elementos do código.
@Override
public String toString() {
return "Exemplo de anotação";
}
No exemplo acima, a anotação @Override
informa ao compilador que o método toString
está sobrescrevendo um método da classe pai.
Tipos de Anotações Padrão no Java
@Deprecated
public void metodoAntigo() {
// Código desatualizado
}
@SuppressWarnings("unchecked")
List lista = new ArrayList();
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MinhaAnotacao {
String valor();
}
Usos Comuns de Anotações
@Autowired
private MeuServico meuServico;
@Test
public void testeMetodo() {
assertEquals(2, 1 + 1);
}
@Entity
e @Table
em JPA definem como as classes Java são mapeadas para tabelas no banco de dados.@Entity
@Table(name = "usuarios")
public class Usuario {
@Id
@GeneratedValue
private Long id;
@Column(name = "nome_completo")
private String nome;
}
Criando Anotações Personalizadas
Definir a anotação:
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface LogExecutionTime {
}
Usar a anotação:
public class MinhaClasse {
@LogExecutionTime
public void meuMetodo() {
System.out.println("Executando método...");
}
}
Processar a anotação (em tempo de execução):
import java.lang.reflect.Method;
public class AnotacaoProcessor {
public static void main(String[] args) throws Exception {
Method metodo = MinhaClasse.class.getMethod("meuMetodo");
if (metodo.isAnnotationPresent(LogExecutionTime.class)) {
long inicio = System.currentTimeMillis();
metodo.invoke(new MinhaClasse());
long fim = System.currentTimeMillis();
System.out.println("Tempo de execução: " + (fim - inicio) + "ms");
}
}
}
Retenção e Alvo das Anotações
As anotações podem ter diferentes políticas de retenção e alvos.
@Retention
)SOURCE
: Disponível apenas em tempo de compilação.CLASS
: Incluída no bytecode, mas não disponível em tempo de execução.RUNTIME
: Disponível em tempo de execução.@Target
)Define onde a anotação pode ser aplicada:
ElementType.TYPE
: Classes ou interfaces.ElementType.METHOD
: Métodos.ElementType.FIELD
: Campos.As anotações no Java oferecem uma maneira eficiente e poderosa de adicionar metadados ao código, possibilitando configurações flexíveis e integrando-se perfeitamente com frameworks modernos. Ao compreender como usá-las e processá-las, você pode criar aplicativos mais organizados, legíveis e configuráveis. Explore o mundo das anotações e descubra como elas podem simplificar suas tarefas diárias de desenvolvimento!