135. Introducción a Spring boot¶
Framework para el desarrollo de aplicaciones en Java , back-end y front-end. Spring Boot ofrece una forma rápida de configurar un proyecto con una estructura predefinida, gestionando automáticamente las dependencias y permitiendo la incorporación de múltiples módulos y tecnologías a través de su sistema de starters. Está diseñado para acelerar el ciclo de desarrollo, reduciendo la cantidad de código de configuración necesario y facilitando el despliegue de la aplicación.
Características * Creación de apicaciones stand-alone * No se necesitan WAR files al tener incluido Tomcat, Jetty o Undertow * Provide opinionated 'starter' dependencies to simplify your build configuration
-
Automatically configure Spring and 3rd party libraries whenever possible
-
Provide production-ready features such as metrics, health checks, and externalized configuration
-
Absolutely no code generation and no requirement for XML configuration
135.1 Instalación¶
Como extensión de Eclipse (en tienda) o bien usando un eclipse adaptado: "Spring Boot Suite tools 4"
135.2 Contenedor de IoC¶
En el core. El contenedor de IoC se basa en dos paquetes: * org.springfrawork.beans * org.springfrawork.context
135.2.1 org.springframework.beans¶
135.2.1.1 Clases Principales¶
-
BeanWrapper
Proporciona operaciones para manipular propiedades de un objeto Java Bean. -
PropertyEditorRegistry
Define métodos para registrarPropertyEditors
. -
BeansException
Excepción raíz para todas las excepciones relacionadas con el manejo de beans en Spring.
135.2.1.2 Interfaces¶
-
BeanFactory
Fábrica de beans principal que permite la creación y recuperación de beans. -
InitializingBean
Interface para beans que requieren inicialización después de la configuración de propiedades. -
DisposableBean
Interface para beans que requieren acciones de limpieza al cerrar el contexto. -
FactoryBean
Permite la creación de beans complejos que son el resultado de la lógica personalizada.
135.2.1.3 Excepciones¶
-
BeanCreationException
Lanzada cuando un bean no puede ser creado. -
BeanInitializationException
Lanzada cuando un bean se inicializa de manera incorrecta. -
NoSuchBeanDefinitionException
Lanzada cuando no se encuentra un bean solicitado.
135.2.2 org.springframework.context¶
135.2.2.1 Clases Principales¶
-
ApplicationContext
ExtiendeBeanFactory
y provee funcionalidades adicionales como internacionalización y eventos. -
ApplicationEvent
Clase base para los eventos de aplicación en un contexto de Spring. -
MessageSource
Interfaz para resolver mensajes en aplicaciones, con soporte para internacionalización.
135.2.2.2 Interfaces¶
-
ApplicationListener
Interface para recibir eventos de aplicación. -
ApplicationContextAware
Interface para objetos que requieren acceso alApplicationContext
. -
ApplicationEventPublisher
Interface para publicar eventos de aplicación. -
Lifecycle
Interface para componentes que tienen un ciclo de vida con métodosstart
ystop
.
135.2.2.3 Excepciones¶
-
ApplicationContextException
Excepción lanzada para problemas relacionados con elApplicationContext
. -
ApplicationEventMulticaster
Interface para multicasters de eventos de aplicación.
135.2.2.4 Anotaciones¶
-
@ComponentScan
Configura la búsqueda de componentes de Spring en paquetes específicos. -
@Scope
Define el ámbito de un bean dentro del contexto.
135.3 Interfaz BeanFactory¶
135.4 Beans¶
Cualquier objeto gestionado por el contenedor de IoC y declarado mediante metadatos
136. Uso del contenedor de IoC¶
- Usamos la clase org.springframeword.ApplicationContext
- Configurado con
- XML
- Anotaciones
- Java
Con el código:
public class MiAplicacion {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// Uso de beans definidos en applicationContext.xml
MiBean miBean = context.getBean("miBean", MiBean.class);
miBean.hacerAlgo();
context.close()
}
}
136.1 Spring JDBC¶
Uso directo del módulo Spring JDBC
Este tutorial
Las clase se organizan en cuatro paquetes:
* core
* datasource
* object
* support
136.1.1 Configuración¶
Usando mysql
@Configuration
@ComponentScan("com.baeldung.jdbc") <<-----
public class SpringJdbcConfig {
@Bean
public DataSource mysqlDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/springjdbc");
dataSource.setUsername("guest_user");
dataSource.setPassword("guest_password");
return dataSource;
}
}
136.1.2 JdbcTemplate para ejecutar queries¶
Cone esta clase podemos:
* Crear y cerrar conexiones
* Ejecutar sentencias y guardar procedure calls
* Iterar sobre ResultSet y devolver resultados
Ejemplo de insert
public int addEmplyee(int id) {
return jdbcTemplate.update(
"INSERT INTO EMPLOYEE VALUES (?, ?, ?, ?)", id, "Bill", "Gates", "USA");
}
136.1.3 Queries con parámetros nombrados¶
136.1.4 Mapeo de resultados de queries a objetos¶
Para ello implementamos el interfaz RowMapper*
public class EmployeeRowMapper implements RowMapper<Employee> {
@Override
public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
Employee employee = new Employee();
employee.setId(rs.getInt("ID"));
employee.setFirstName(rs.getString("FIRST_NAME"));
employee.setLastName(rs.getString("LAST_NAME"));
employee.setAddress(rs.getString("ADDRESS"));
return employee;
}
}
String query = "SELECT * FROM EMPLOYEE WHERE ID = ?";
Employee employee = jdbcTemplate.queryForObject(
query, new Object[] { id }, new EmployeeRowMapper());
136.2 Guía rápida¶
- Iniciar proyecto con eclipse (tipo Spring Boot ) o usando la web online start.spring.io
- Añadir un código básico:
package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@GetMapping("/hello")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("Hello %s!", name);
}
}
136.3 Tutorial: Primera aplicación¶
https://spring.io/guides/gs/spring-boot/
136.4 Tutorial: Aplicación Restfull Web Service¶
https://spring.io/guides/gs/rest-service/
136.5 Tutorial full-stack de freecodecap¶
En esta página local
136.6 Arquitectura de Spring. Ecosistema Spring¶
136.7 Proyectos en el Ecosistema de Spring¶
- Core Container
-
Spring Framework: El núcleo de toda la tecnología Spring, proporciona el contenedor de IoC (Inversión de Control).
-
Desarrollo Web
- Spring MVC: Proporciona el modelo-vista-controlador (MVC) para aplicaciones web.
-
Spring WebFlux: Alternativa reactiva a Spring MVC para manejar flujos asincrónicos de datos.
-
Acceso a Datos
- Spring Data: Simplifica el acceso a datos y proporciona soporte para diferentes fuentes de datos como JPA, MongoDB, Elasticsearch, etc.
- Spring Data REST: Expone los repositorios de Spring Data como servicios REST.
-
Spring JDBC: Proporciona un acceso más sencillo y menos propenso a errores a las bases de datos a través de JDBC.
-
Seguridad
-
Spring Security: Proporciona funcionalidades de autenticación y autorización.
-
Microservicios
- Spring Boot: Facilita la creación de aplicaciones autoconfigurables y listas para producción.
-
Spring Cloud: Proporciona herramientas para desarrollar aplicaciones de microservicios.
-
Integración y Batch
- Spring Integration: Proporciona capacidades de integración de sistemas, siguiendo los patrones de integración empresarial (EIP).
-
Spring Batch: Permite la implementación de aplicaciones por lotes de gran volumen y alta eficiencia.
-
Mensajería
- Spring Messaging: Proporciona características para trabajar con sistemas de mensajería, como JMS y RabbitMQ.
-
Spring AMQP: Provee soporte para trabajar con el protocolo de mensajería AMQP.
-
Otras Utilidades
- Spring Security OAuth: Proporciona soporte para el uso de OAuth2.
- Spring Mobile: Facilita el desarrollo de aplicaciones móviles.
- Spring Social: Proporciona conexiones con servicios sociales como Facebook, Twitter, etc.
136.8 Beans Importantes en Spring Boot¶
-
DataSource: Configura la conexión a la base de datos.
-
EntityManagerFactory: Para JPA (Java Persistence API), facilita la creación del
EntityManager
que gestiona las entidades. -
JdbcTemplate: Facilita la interacción con bases de datos en aplicaciones que utilizan JDBC.
-
ResourceServerConfigurerAdapter y WebSecurityConfigurerAdapter: Se utilizan para la configuración de seguridad en aplicaciones Spring Boot.
-
RestTemplate: Facilita la comunicación con servicios web RESTful.
-
DispatcherServlet: Controlador frontal para manejar todas las solicitudes entrantes en aplicaciones web MVC.
-
TomcatEmbeddedServletContainerFactory o equivalentes para otros servidores: Configura el contenedor de servlet embebido.
-
TaskExecutor: Se utiliza para la ejecución de tareas en segundo plano.
-
CommandLineRunner y ApplicationRunner: Beans que permiten ejecutar código específico justo después de que la aplicación haya arrancado.
-
LocalSessionFactoryBean: En aplicaciones que utilizan Hibernate, este bean configura la
SessionFactory
. -
RabbitTemplate, JmsTemplate: Para aplicaciones que usan mensajería, estos beans facilitan la interacción con sistemas de mensajería como RabbitMQ o JMS.
COMO SE RELACIONAN ENTRE SI ESTOS BEANS