Personalice la anotación de Java con ejemplos

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *