Spring Boot - Apuntes
Spring Boot - Apuntes
Spring Boot - Apuntes
Spring Boot
Apuntes
10/05/2022
Inversion of Control (Ioc)
La primera anotación que vemos @Configuration es necesaria porque nos dice que es
una clase de definición de beans.
La siguiente anotación que vemos @Bean, indica que vamos a definir un bean, por
defecto Spring crea el bean como Singleton Scope.
Inyección de Dependencias basada en Setter
La Inyección basada en Setter es parecida a la Inyección basada en constructor con la
única diferencia que una vez se crea el objeto se hace un set con los atributos del
mismo.
Spring recomienda por lo general hacer uso de la inyección por constructor para aquellas
dependencias que son obligatorias y basado en setter para la inyección de aquellas
dependencias que son opcionales.
Documentación:
• https://www.baeldung.com/inversion-control-and-dependency-injection-in-spring
• https://refactorizando.com/inyeccion-dependencias/
Application Context
ClassPathXmlApplicationContext:
En caso de que queramos cargar un archivo de configuración XML desde el classpath ,
podemos usar la clase ClassPathXmlApplicationContext . Similar
a FileSystemXMLApplicationContext, es útil para probar arneses, así como contextos de
aplicaciones incrustados dentro de archivos JAR.
AnotaciónConfigWebApplicationContext:
Documentación:
➢ https://www.baeldung.com/spring-application-context
Programación Orientada a Aspectos (AOP)
Es una metodología con la que se crean las aplicaciones, nos da la flexibilidad para
eliminar las preocupaciones transversales de nuestra aplicación y separarlas de la lógica
de negocio.
@Component
public class MiComponente {
• @Before : Consejo que se ejecuta antes de un punto de unión, pero que no tiene
la capacidad de evitar que el flujo de ejecución avance hasta el punto de unión
(a menos que genere una excepción).
• @AfterReturning : Consejo que se ejecutará después de que un punto de unión
se complete normalmente.
• @AfterThrowing : Consejo para ejecutar si un método sale al lanzar una
excepción.
• @After : Consejo a ejecutar independientemente del medio por el que sale un
punto de unión (retorno normal o excepcional).
• @Around : consejos que rodean un punto de unión, como la invocación de un
método.
@Pointcut: un predicado que coincide con los puntos de unión. El consejo está asociado
con una expresión de punto de corte y se ejecuta en cualquier punto de unión que
coincida con el punto de corte (por ejemplo, la ejecución de un método con un nombre
determinado). El concepto de puntos de unión combinados con expresiones de corte de
puntos es fundamental para AOP, y Spring usa el lenguaje de expresiones de corte de
puntos de AspectJ de forma predeterminada.
7. Clase Main.
Documentación:
• https://docs.spring.io/spring-framework/docs/4.3.12.RELEASE/spring-
framework-reference/html/aop.html
Spring Boot
Esta estructura de paquetes agrupa las clases en 9 paquetes principales los cuales
definiremos a continuación.
3. Paquete “response” este paquete sirve para retornar las diferentes respuestas
del api, así como también los diferentes errores que se pueden mostrar al probar
nuestras Apis.
Clase BaseResponse:
Clase Response:
5. Paquete “Models”, Cada Modelo tiene un ambiente principal que se utiliza para
la creación y reorganización de la base de datos, y como ambiente por defecto
para la generación de la aplicación.
Anotaciones En Java
Una anotación en Java es aquella característica que le permite incrustar información
suplementaria en un archivo fuente. Esta información no cambia las acciones de un
programa, pero puede ser utilizada por varias herramientas, tanto durante el desarrollo
como durante el despliegue.
@Entity
Las entidades en JPA no son más que POJO que representan datos que se pueden
conservar en la base de datos. Una entidad representa una tabla almacenada en una
base de datos. Cada instancia de una entidad representa una fila en la tabla.
@Table(name=”Estudiante”)
La anotación @Table le permite especificar los detalles de la tabla que se utilizará para
conservar la entidad en la base de datos. La anotación @Table proporciona cuatro
atributos, lo que le permite anular el nombre de la tabla, su catálogo y su esquema, y
aplicar restricciones únicas en las columnas de la tabla. Por ahora, estamos usando solo
el nombre de la tabla, que es Estudiante.
@Id
se anota con @Idpara que JPA la reconozca como la ID del objeto. La idpropiedad
también se anota con @GeneratedValuepara indicar que el ID debe generarse
automáticamente.
@Column(name=”nombreColumna”)
se usa para Agregar el nombre de la columna en la tabla de una base de datos.
@ManyToOne
Existe relación Many-To-One entre las entidades donde se hace referencia a una entidad
(columna o conjunto de columnas) con valores únicos que contienen de otra entidad
(columna o conjunto de columnas). En bases de datos relacionales, estas relaciones se
aplican mediante el uso de clave primaria clave externa entre las tablas.
@OneToMany
En esta relación, cada fila de una entidad se hace referencia a los muchos registros
secundarios en otra entidad. Lo importante es que los registros secundarios no pueden
tener varios padres. En una relación uno a varios entre la tabla A y B de la tabla, cada
fila en la tabla A puede ser vinculado a una o varias filas en la tabla B.
@OneToOne
En una relación uno-a-uno, un elemento puede vincularse al único otro elemento.
Significa que cada fila de una entidad se refiere a una y sólo una fila de otra entidad.
@ManyToMany
Relación de varios a varios es donde una o más filas de una entidad se asocian a más de
una fila en otra entidad.
@JoinTable
la cual nos sirve para definir la estructura de la tabla intermedia que contendrá la
relación.
Documentación:
https://www.baeldung.com/jpa-many-to-many
https://spring.io/projects/spring-data-jpa
Clase enum “ModelStatus”: Sirve para cambiar el estado cuando sea de tipo enum.
6. Paquete y clase “Mapper”: Nos permite hacer el mapeo entre los DTO y las
entidades y viceversa.
Dependencias necesarias:
MapStruct
es una librería que nos va a permitir hacer mapeo de objetos sin tener que escribir todo
el código a mano, simplemente con una interfaz, en la que le vamos a indicar el objeto
de entrada y el objeto de salida.
Anotación necesaria:
@Mapper(componentModel = "spring")
Sirve para indicar que va hacer un mapeo de spring.
7. Paquete “DTO”:
Un objeto de transferencia de datos es un objeto que transporta datos entre procesos.
La motivación de su uso tiene relación con el hecho que la comunicación entre procesos
se realiza generalmente mediante interfaces remotas, donde cada llamada es una
operación costosa.
Dependencia:
Jackson
Jackson es una librería Java muy potente para el procesamiento / parseo de objetos a
json y viceversa. Ofrece muchas opciones y posibilidades, anotaciones propias, etc.
Anotaciones:
@JsonSerialize
se usa para especificar un serializador personalizado para organizar el objeto json.
@JsonProperty
es un meta datos para decirle a serializer cómo hacer un objeto serial. Se utiliza para:
variable nombre. acceso (LECTURA, ESCRITURA)
Dependencia:
javax-validation
validation contiene las API de validación de beans que describen cómo validar mediante
programación JavaBeans.
Anotaciones:
@NotNull
no puede ser nulo, pero puede estar vacío, sin restricción de tamaño.
@NotEmpty
no puede ser nulo y Size> 0
@NotBlank
solo se usa para String, no puede ser nulo y tamaño> 0 después de trim ().
@Email
Se usa para validar que los datos tengan formato de email.
@Builder
le permite generar automáticamente el código requerido para que su clase sea
instanciable. Se puede colocar en una clase, o en un constructor, o en un método.
@Builder.Default
El campo anotado con @Defaultdebe tener una expresión de inicialización; esa
expresión se toma como predeterminada para usarse si no se establece explícitamente
durante la construcción.
@NoArgsConstructor
generará un constructor sin parámetros. Si esto no es posible (debido a los campos
finales), en su lugar se producirá un error de compilación, a menos que se
utilice @NoArgsConstructor (force = true).
@AllArgsConstructor
genera un constructor con un parámetro para cada campo en su clase.
Dependencias:
springFramework starter-web
Spring Framework es un framework Open Source que facilita la creación de aplicaciones
de todo tipo en Java, Kotlin y Groovy.
Anotaciones:
@Repository
El concepto de Repository como clase que se encarga de gestionar todas las operaciones
de persistencia contra una tabla de la base de datos es hace ya mucho tiempo un clásico.
9. Paquete “Service”
Dependencias:
springFramework starter-web
Anotaciones:
@Service
marca una clase Java que realiza algún servicio, como ejecutar lógica de negocios,
realizar cálculos y llamar a API externas. Esta anotación es una forma especializada de la
anotación @Component destinada a ser utilizada en la capa de servicio.
Dependencias:
springFramework starter-web
Anotaciones:
@RestController
anotación en Spring es esencialmente una combinación de @Controller y
@ResponseBody.
@Controller
permite la autodetección de clases de componentes en el classpath y las definiciones de
bean de registro automático para ellas. Para habilitar la detección automática de dichos
controladores anotados, puede agregar el escaneo de componentes a su configuración.
La clase Java anotada con @Controller es capaz de manejar múltiples asignaciones de
solicitudes.
@ResquestBody
nos permite recuperar el cuerpo de la solicitud. Luego podemos devolverlo como una
cadena o deserializarlo en un objeto Java antiguo simple (POJO). Spring tiene
mecanismos integrados para deserializar objetos JSON y XML en POJO, lo que también
facilita mucho esta tarea.
@GetMapping(params = "studentName")
Esta anotación se utiliza para asignar solicitudes HTTP GET a métodos de controlador
específicos. @GetMapping es una anotación compuesta que actúa como un acceso
directo para @RequestMapping (method = RequestMethod.GET).
@PathVariable
es la anotación que nos sirve dentro de Spring framework para configurar variables
dentro de los propios segmentos de la URL algo que a nivel de Arquitecturas REST es
imprescindible.
@PostMapping(value = "/{studentId}/subjects")
Esta anotación se utiliza para asignar solicitudes HTTP POST a métodos de controlador
específicos. @PostMapping es una anotación compuesta que actúa como un acceso
directo para @RequestMapping (method = RequestMethod.POST).
@PutMapping
Esta anotación se utiliza para mapear solicitudes HTTP PUT en métodos de manejador
específicos. @PutMapping es una anotación compuesta que actúa como un acceso
directo para @RequestMapping (method = RequestMethod.PUT).
@DeleteMapping(value = "/{studentId}")
Esta anotación se usa para asignar solicitudes HTTP DELETE a métodos de controlador
específicos. @DeleteMapping es una anotación compuesta que actúa como un acceso
directo para @RequestMapping (method = RequestMethod.DELETE).
https://spring.io/guides/tutorials/rest/
• Método para obtener los datos ordenado paginado con criterios dados “GET”.
• Método del controlador para obtener una solo registro por su ID “GET”.
• Método del controlador para guardar un registro “POST”.