Juan Pablo Prado

Software Engineer

  • Home
  • About
  • Contact

Connect

  • Github
  • Linkedin
  • Twitter

Juan Pablo Prado © 2019

Introducción a Spring Framework

agosto 20, 2017 By Juan Prado Leave a Comment

Spring facilita la creación de aplicaciones Java empresariales. Proporciona todo lo necesario más allá del propio lenguaje Java. También proporciona extensiones y soporte para aplicaciones creadas en Groovy y Kotlin.

Spring soporta una amplia gama de escenarios de aplicación. En una empresa grande, a menudo existen aplicaciones durante mucho tiempo y tienen que ejecutarse en un JDK y en un servidor de aplicaciones cuyo ciclo de actualización es más allá del control del desarrollador. Otras pueden correr como un solo jar con el servidor embebido, posiblemente en un ambiente de la nube. Sin embargo, otras pueden ser aplicaciones independientes (como lotes o cargas de trabajo de integración) que no necesitan un servidor.

Spring es de código abierto. Tiene una comunidad grande y activa que proporciona una retroalimentación continua basada en una amplia gama de casos de uso en el mundo real. Esto ha ayudado a Spring a evolucionar con éxito durante un tiempo muy largo.

¿Por qué Spring Framework?

Spring Framework tiene como objetivo ayudar a las personas a escribir código sin preocuparse demasiado del middleware con el que interactúa el código. Dejándonos utilizar la inyección de la dependencias, la cual es una forma elegante de decir que se escribe código para Interfaces. Y debido a que tienes interfaces, puedes conectar implementaciones. Puedes intercambiar estas implementaciones.

¿Qué quiere decir “Spring”?

El término “Spring” significa cosas diferentes en diferentes contextos. Puede utilizarse para referirse al proyecto Spring Framework, que es donde todo comenzó. Con el tiempo, otros proyectos de se han construido por encima del framework Spring. Muy a menudo, cuando la gente dice, “Spring”, se refieren a toda la familia de proyectos.

Spring Framework está dividido en módulos. Las aplicaciones pueden elegir los módulos que necesitan. En el corazón están los módulos del núcleo, incluyendo un modelo de configuración y un mecanismo de inyección de dependencia. Más allá de eso, Spring Framework proporciona soporte fundamental para diferentes arquitecturas de aplicaciones, incluyendo mensajería, datos transaccionales y persistencia, y web.

También incluye el framework web Spring MVC basado en servlets y, en paralelo, el framework web reactivo Spring WebFlux.

Historia de Spring y el Spring Framework

Spring nació en 2003 como una respuesta a la complejidad de las primeras especificaciones J2EE. Mientras algunos consideran que Java EE y Spring están en competencia, Spring es, de hecho, complementario de Java EE. Spring no soporta todas las especificaciones de Java EE. Por el contrario, se integra con un subconjunto cuidadosamente seleccionado de las especificaciones de Java EE más ampliamente utilizadas:

  • JPA (JSR 338)
  • JMS (JSR 914)
  • Servlet API (JSR 340)
  • WebSockets (JSR 356)
  • JSON Binding API (JSR 367)
  • Bean Validation (JSR 303)

Spring Framework también soporta las especificaciones de Inyección de dependencia (JSR 330) y Anotaciones comunes (JSR 250), que los desarrolladores de aplicaciones pueden elegir utilizar en lugar de los mismos mecanismos proporcionados por Spring Framework.

Con el tiempo, el papel de Java EE en el desarrollo de aplicaciones ha evolucionado. En los primeros días de Java EE y Spring, se crearon aplicaciones para implementarlas en un servidor de aplicaciones. Hoy en día, con la ayuda de Spring Boot, las aplicaciones se crean de una forma amigable a los devops y la nube, con el contenedor de servlets embebido y fácil de cambiar.

Spring continúa innovando y evolucionando. Más allá del Spring Framework, hay otros proyectos, como Spring Boot, Spring Security, Spring Data, Spring Cloud, Spring Batch, entre otros. Es importante recordar que cada proyecto tiene su propio repositorio de código fuente, rastreador de incidencias y cadencia de lanzamiento. Echa un vistazo en spring.io/projects para ver la lista completa de proyectos Spring. Y a la nueva documentación de referencia de Spring 5, la cual me motivo a escribir este post.

Filed Under: Uncategorized

Internacionalización (i18n) y localización (L10n)

agosto 15, 2017 By Juan Prado Leave a Comment

¿Qué es la internacionalización?

La internacionalización es el proceso de diseñar software de manera tal que pueda adaptarse a diferentes idiomas y regiones sin la necesidad de realizar cambios de ingeniería ni en el código.

¿Qué es la localización?

La localización es el proceso de adaptar el software para una región específica mediante la adición de componentes específicos de un locale (configuración regional) y la traducción de los textos, por lo que también se le puede denominar regionalización. No obstante la traducción literal del inglés es la más extendida.

i18n & L10n

Es una práctica común en el idioma inglés (sobre todo en el ámbito de la computación), abreviar internationalization con el numerónimo (palabra que contiene números) “i18n“. Ello se debe a que entre la primera i y la última ene de dicha palabra hay 18 letras. Lo mismo sucede con localization, que se abrevia “L10n“. La L mayúscula se utiliza para distinguirla de la i minúscula de i18n.

Filed Under: Uncategorized

Spring Data REST – Eventos

octubre 17, 2016 By Juan Prado Leave a Comment

Hay ocho diferentes eventos que el exportador REST emite durante todo el proceso de trabajo con una entidad. Estos son:

  • BeforeCreateEvent
  • AfterCreateEvent
  • BeforeSaveEvent
  • AfterSaveEvent
  • BeforeLinkSaveEvent
  • AfterLinkSaveEvent
  • BeforeDeleteEvent
  • AfterDeleteEvent
package com.juanpabloprado.review;

import com.juanpabloprado.user.User;
import com.juanpabloprado.user.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.rest.core.annotation.HandleBeforeCreate;
import org.springframework.data.rest.core.annotation.RepositoryEventHandler;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

@Component
@RepositoryEventHandler(Review.class)
public class ReviewEventHandler {
  private final UserRepository users;

  @Autowired
  public ReviewEventHandler(UserRepository users) {
    this.users = users;
  }

  @HandleBeforeCreate
  public void addReviewerBasedOnLoggedInUser(Review review) {
    String username = SecurityContextHolder.getContext().getAuthentication().getName();
    User user = users.findByUsername(username);
    review.setReviewer(user);
  }
}

Tenemos una clase ReviewEventHandler, con un nombre que explica la intención de la clase i.e. manejar los eventos de la entidad Review.

Para declarar un handler, crea un POJO y ponle la anotación @RepositoryEventHandler. Esto le dice al BeanPostProcessor que esta clase tiene que ser inspeccionada para encontrar métodos handler.

Ahora la anotación @Component es para que la aplicación tome en cuenta esta clase como un componente Spring, y sea recogida por @SpringBootApplication o @ComponentScan el cual escanea el classpath en busca de POJOS con anotaciones Spring dentro del paquete e.g. @Component @Repository, @Service, o @Controller

private final UserRepository users;

  @Autowired
  public ReviewEventHandler(UserRepository users) {
    this.users = users;
  }

Esta parte no es mas que inyección de dependencias, por medio de un argumento del constructor, para ello es necesario la anotación @Autowired en el constructor de nuestra clase.

Como en todo post llegamos al final… But show me the code!
Echale un vistazo al repo en GitHub. Y si quieres aprender Spring Data REST con Spring Boot hay un excelente curso en Treehouse, en el cual se basa mi código. 😀

Filed Under: Uncategorized

  • 1
  • 2
  • 3
  • …
  • 6
  • Next Page »

Categorías

  • Uncategorized