En el articulo anterior de manejo de anotaciones java vimos como crear nuestras propias anotaciones .Sin embargo falto el código de como una vez construidas estas anotaciones podíamos usarlas en nuestro código .Vamos a cubrir esta parte en este articulo. Para ello lo primero que vamos a hacer es declarar una anotación denominada @Persistencia.
package es.curso; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(value={ElementType.FIELD} ) @Retention(RetentionPolicy.RUNTIME) public @interface Persistencia { String campo(); String tipo(); }
La anotación en si queda marcada por otras dos anotaciones . Es algo que nos puede parecer extraño pero es habitual en el mundo de las anotaciones .Existen anotaciones que solo sirven para marcar a otras anotaciones .
- @Target : Esta anotación sirve para delimitar en que partes de nuestro código podemos utilizar la anotación de @Persistencia .En este caso limita a unicamente los campos de la clase.
- @Retention :Esta anotación sirve para asegurarnos que la información que nos provee la anotacion @Persistencia esta disponible en tiempo de ejecución .Existen otras anotaciones que solo estan disponibles en tiempo de compilación por ejemplo.
Una vez que hemos construido nuestra anotación podemos utilizar una clase para probarla.
package es.curso; public class Persona { @Persistencia(campo = "nombre", tipo = "varchar") private String nombre; @Persistencia(campo="edadPersona",tipo="decimal") private String edad; public String getNombre() { return nombre; } public void setNombre(String nombre) { this.nombre = nombre; } public String getEdad() { return edad; } public void setEdad(String edad) { this.edad = edad; } }
Como podemos ver hemos utilizado la anotación a nivel de la propiedades “nombre” y “edad” ya que debido a la anotación @Target no podría ser utilizadas
en otro sitio.
Nos queda por ver como accedemos en tiempo de ejecución a la información que almacenan las anotaciones .Para ello utilizaremos el API de Reflection de Java
package es.curso; import java.lang.reflect.Field; public class PrincipalAnotaciones { public static void main(String[] args) { Persona p = new Persona(); Class clasePersona = p.getClass(); Field[] campos= clasePersona.getDeclaredFields(); for(Field campo: campos) { Persistencia persistencia=campo.getAnnotation(Persistencia.class); System.out.println("Nombre :" +persistencia.campo()); System.out.println("Tipo :"+ persistencia.tipo()); } } }
El código no imprimirá por pantalla la información almacenada en las anotaciones.
Nombre :nombre Tipo :varchar Nombre :edad Tipo :decimal
Hola estuve mirando y probando el post sobre las anotaciones y me pareció muy interesante, estoy viendo cómo crear unas para la parte de base de datos con MySQL y quería preguntar cómo puedo crear algo parecido a JPA. Ej; tengo un LibroModel el que tenga las gestiones para la base de datos, y en la clase Libro tengo una variable que por medio de un método fábrica instancie esa variable de tipo LibroModel y en el Controlador llamo a los método de la clase Libro que invocan a los del modelo. Para ordenar los campos para crear y editar… Read more »
La primera pregunta que te tienes que hacer es porque quieres reinventar JPA 🙂 . Normalmente el diseño de un framework con anotaciones consume mucho tiempo. Probablemente tendrías que añadir a las anotaciones , más atributos para tener un control muy a detalle y luego generar dinamicamente las consultas tipo insert select etc
[…] https://www.arquitecturajava.com/anotaciones-java-ii/ […]
[…] Otros artículos relacionados: Java Proxy , Java Annotations […]
Para que el parametro de la anotación, no sea obligatoria, como es? Saludos y gracias.
ais 🙂 http://stackoverflow.com/questions/3520375/how-to-create-optional-parameters-for-own-annotations
Excelente Tutorial, una cosa siempre noto en todos los tutos de este tipo, se agradeceria dejar el link a la primera parte, por que muchas veces llegamos a este tipos de resultados por google.
Saludos, excelente el sitio!
gracias por el aporte 🙂
gracias por la idea
No encuentro el primer articulo de Anotaciones, aunque en este se entiende (excelente explicaciòn) me gustaria leer el primero.
Ya di con el gracias XD
me alegro 🙂
Excelente explicación me sirvio para aclarar algunas dudas.
Muchas Gracias.
Me alegro que te fuera util 🙂