Precondiciones
- Toda la información de como instalar, configurar y crear primer proyecto con Micronaut esta en Introducción a micronaut | CodigoElectronica.
Definiciones
Introspección
La introspección en programación se refiere a la capacidad de un programa de examinar y modificar su propia estructura y comportamiento en tiempo de ejecución. En otras palabras, se trata de la capacidad de un programa para "mirar hacia adentro" y examinar sus propias características.
Introspección en Micronaut
Micronaut es un framework moderno de desarrollo de aplicaciones en Java, que también ofrece capacidades de introspección. Al igual que otros lenguajes y frameworks, la introspección en Micronaut permite examinar y modificar las características del programa en tiempo de ejecución.
Una forma común de introspección en Micronaut es utilizando la anotación @Introspected
en una clase, lo que permite a Micronaut generar código en tiempo de compilación para acceder a los campos, métodos y constructores de la clase. Esto puede ser especialmente útil para la serialización y deserialización de objetos, ya que permite a Micronaut generar código de mapeo de objetos de forma automática.
Además, Micronaut también proporciona una serie de utilidades para la introspección en tiempo de ejecución, como la clase BeanIntrospection
, que permite examinar los métodos y campos de una clase de manera programática, y la clase ReflectionUtils
, que permite acceder a la información de las clases y métodos mediante reflexión.
Documentación oficial de Micronaut
La siguiente practica la vamos a realizar guiándonos de la documentación oficial de Micronauta (Introspección).
Crear una clase en Micronaut
Para entender este concepto, vamos a usar un ejemplo que reutilizaremos a futuro en los próximos articulo.
Podemos observar que son tres clases que vamos a crear y a inyectar con la introspección en Micronaut. Este ejemplo que se esta creado con los artículos tiene como objetivo crear un listado de directorio telefónico, esto lo explicaremos en futuros post, por el momento tengamos en cuenta lo siguiente:
- La clase contactos tiene los campos básicos de un contacto y esta clase no tiene relaciones con otras clases.
- La clase error, crea una relación del error y un mensaje.
- La clase respuesta tiene un mensaje y la lista de los errores controlados que quiere mostrar en la respuesta.
Estructura del código
Crearemos un proyecto nuevo como lo explicamos en Crear primer proyecto con micronaut, adicionalmente vamos a crear un paquete (package) de java llamado valueObjects, en este paquete crearemos lo siguiente:
- Creamos el paquete "command", donde se almacenaran las clases que se usan para recibir las peticiones.
- Creamos el paquete "dto", que son las clases de respuesta.
C:.
│ .gitignore
│ micronaut-cli.yml
│ mvnw
│ mvnw.bat
│ pom.xml
│ README.md
│
├───.mvn
│
├───src
│ ├───main
│ │ ├───java
│ │ │ └───com
│ │ │ └───codigoelectronica
│ │ │ │ Application.java
│ │ │ │
│ │ │ └───valueobjects
│ │ │ ├───command
│ │ │ │ Contactos.java
│ │ │ │
│ │ │ └───dto
│ │ │ Error.java
│ │ │ Respuesta.java
│ │ │
│ │ └───resources
│ │ application.yml
│ │ logback.xml
│ │
│ └───test
│
└───target
Estructura de las clases
Vamos a construir las clases, en este post explica la Estructura de una Clase en Java (aknowledgejourney.com).
La primera clase a construir es la de contactos, guiándonos del diagrama UML crearemos lo siguiente:
Clase Contactos
package com.codigoelectronica.valueobjects.command;
import io.micronaut.core.annotation.Introspected;
@Introspected // 1
public class Contactos { // 2
// 3
private String nombre;
private String apellido;
private String email;
private String telefono;
// 4
public Contactos() {
}
// 5
public String getNombre() {
return this.nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return this.apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getEmail() {
return this.email;
}
public void setEmail(String email) {
this.email = email;
}
public String getTelefono() {
return this.telefono;
}
public void setTelefono(String telefono) {
this.telefono = telefono;
}
// 6
@Override
public String toString() {
return "{" +
" nombre='" + getNombre() + "'" +
", apellido='" + getApellido() + "'" +
", email='" + getEmail() + "'" +
", telefono='" + getTelefono() + "'" +
"}";
}
}
- Usamos la etiqueta de introspección (@Introspected).
- Creamos la clase contactos.
- Creamos los atributos de la clase.
- Creamos el constructor.
- Creamos los métodos getters y setters.
- Sobrescribimos el metodo toString.
Clase Error
package com.codigoelectronica.valueobjects.dto;
import io.micronaut.core.annotation.Introspected;
@Introspected
public class Error {
private String codigo;
private String mensaje;
public Error() {
}
public String getCodigo() {
return this.codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}
public String getMensaje() {
return this.mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
@Override
public String toString() {
return "{" +
" codigo='" + getCodigo() + "'" +
", mensaje='" + getMensaje() + "'" +
"}";
}
}
Clase Respuesta
package com.codigoelectronica.valueobjects.dto;
import java.util.List;
import io.micronaut.core.annotation.Introspected;
@Introspected
public class Respuesta {
private String mensaje;
private List<Error> errores;
public Respuesta() {
}
public String getMensaje() {
return this.mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
public List<Error> getErrores() {
return this.errores;
}
public void setErrores(List<Error> errores) {
this.errores = errores;
}
@Override
public String toString() {
return "{" +
" mensaje='" + getMensaje() + "'" +
", errores='" + getErrores() + "'" +
"}";
}
}