Las anotaciones de Java son un mecanismo para agregar información de metadatos a nuestro código fuente (Programa). Son una parte poderosa de Java que se agregó a JDK5. Las anotaciones proporcionan una alternativa al uso de descriptores XML. Además, podemos adjuntarlos a paquetes, clases, interfaces, métodos y campos, las anotaciones por sí mismas no tienen efecto en la ejecución de un código fuente (Programa). En este artículo, nos centraremos en cómo crear y procesar anotaciones personalizadas. Podemos leer en detalle sobre cómo personalizar las anotaciones de Java con Ejemplo
Crear anotación personalizada
Vamos a crear tres anotaciones personalizadas con el objetivo de serializar un objeto en una string JSON. eso es –
- Anotación de nivel de clase
- Anotación de nivel de campo
- Anotación de nivel de método
1. Anotación de nivel de clase
El primer paso para crear una anotación personalizada es declararla usando la palabra clave @interface:
public @interface GFG { }
El siguiente paso es especificar el alcance y el destino de nuestra anotación personalizada:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.Type) public @interface GFG { }
2. Anotación a nivel de campo
De la misma manera, creamos nuestra segunda anotación para marcar los campos que vamos a incluir en el JSON generado:
Java
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.FIELD) public @interface GFGElement { public String key() default ""; }
3. Anotación de nivel de método
Para serializar un objeto en una string JSON, queremos ejecutar algún método para inicializar un objeto. Por esa razón, vamos a crear una anotación para marcar este método. En primer lugar, declaró una anotación pública con visibilidad en tiempo de ejecución que podemos aplicar a los métodos de nuestras clases.
Java
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Init { }
Ejemplo
Java
package com.admfactory.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Documented @Target(ElementType.FIELD) @Inherited @Retention(RetentionPolicy.RUNTIME) public @interface DBField { String name(); Class< ?> type(); boolean isPrimaryKey() default false; }
Uso:
Clase anotada
Java
package com.admfactory.annotation; import java.util.Date; public class User { @DBField(name = "id", isPrimaryKey = true, type = Long.class) private long id; @DBField(name = "name", type = String.class) private String name; @DBField(name = "email", type = String.class) private String email; @DBField(name = "created", type = Date.class) private Date created; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getCreated() { return created; } public void setCreated(Date created) { this.created = created; } }
Código ejecutable
Java
package com.admfactory.annotation; import java.lang.reflect.Field; import java.util.Date; public class AnnotationExample { public static void main(String[] args) throws Exception { System.out.println("Java Custom Annotation Example"); System.out.println(); User usr = new User(); usr.setEmail("john.doe@example.com"); usr.setName("John Doe"); usr.setId(112); usr.setCreated(new Date()); for (Field field : usr.getClass().getDeclaredFields()) { DBField dbField = field.getAnnotation(DBField.class); System.out.println("field name: " + dbField.name()); // changed the access to public field.setAccessible(true); Object value = field.get(usr); System.out.println("field value: " + value); System.out.println("field type: " + dbField.type()); System.out.println("is primary: " + dbField.isPrimaryKey()); System.out.println(); } } }
Producción:
Java Custom Annotation Example field name: id field value: 112 field type: class java.lang.Long is primary: true field name: name field value: John Doe field type: class java.lang.String is primary: false field name: email field value: john.doe@example.com field type: class java.lang.String is primary: false field name: created field value: Wed Jul 25 17:10:05 BST 2018 field type: class java.util.Date is primary: false
Publicación traducida automáticamente
Artículo escrito por ravikdubey360 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA