0% encontró este documento útil (0 votos)
7 vistas23 páginas

Spring Framework, Es Un Marco de Trabajo para El Desarrollo de Aplicaciones en Java, Este

Cargado por

Alek Sanmartin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
7 vistas23 páginas

Spring Framework, Es Un Marco de Trabajo para El Desarrollo de Aplicaciones en Java, Este

Cargado por

Alek Sanmartin
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 23

1- ¿Cuál es la diferencia fundamental entre Spring & Spring Boot?

Spring Framework, es un marco de trabajo para el desarrollo de aplicaciones en Java, este


proporcionando soluciones a través de un diseño modular y una arquitectura flexible

- Inversión de Control (IoC): Spring se encarga de gestionar la creación y gestión


de objetos (beans) en lugar de que la aplicación lo haga

- Aspect-Oriented Programming (AOP): Facilita la programación orientada a


aspectos, como la gestión de transacciones o la seguridad

- Capa de Abstracción para Acceso a Datos: capa de abstracción para acceder a


bases de datos

- Módulos Independientes: Se divide en módulos que pueden ser utilizados


según las necesidades del proyecto (Spring Core, Spring MVC, Spring Security,
etc.).

Spring Boot: Spring Boot es un proyecto dentro del ecosistema de Spring que se enfoca en
simplificar el desarrollo de aplicaciones Spring

- Convención sobre Configuración: se aplican configuraciones predeterminadas

- Configuración Automática: Ofrece configuración automática basada en las


dependencias presentes en el proyecto

- Servidores Integrados: Incluye servidores web integrados (Tomcat, Jetty o


Undertow), haciendo que las aplicaciones sean autocontenidas y listas para
ejecutarse sin configuraciones adicionales.

- Desarrollo Rápido: Permite un desarrollo rápido con opiniones


predeterminadas y facilidad de inicio,

Diferencias Principales:

- Configuración: Spring Framework requiere configuraciones más detalladas y


personalización manual, mientras que Spring Boot se basa en configuraciones
automáticas y convenciones por defecto.
En resumen, mientras que Spring Framework proporciona una base integral y modular
para el desarrollo de aplicaciones empresariales en Java, Spring Boot se centra en
simplificar el proceso de desarrollo al proporcionar configuraciones predeterminadas,
facilitar la creación de aplicaciones autónomas y reducir la cantidad de configuración
manual necesaria. Spring Boot se utiliza comúnmente en el desarrollo de microservicios y
aplicaciones basadas en servicios debido a su enfoque simplificado y orientado a la
convención.

2- ¿Qué es un bean?

es un objeto gestionado por el contenedor de Spring.

- Representa un objeto dentro de Spring: Un bean es simplemente un objeto


que es instanciado, ensamblado y gestionado por el contenedor de Spring. En
términos más simples, un bean es una instancia de una clase en la aplicación.

- Son manejados por el contenedor de Spring: Spring IoC (Inversión de Control)


es la característica central que permite que los beans sean gestionados por el
contenedor

- Tienen un ciclo de vida: Los beans en Spring pueden pasar por diferentes fases
en su ciclo de vida. Estas fases incluyen la creación, la inicialización y la
destrucción.

- Son reusables: Uno de los principios fundamentales de Spring es la promoción


de la reutilización de componentes. Los beans son diseñados para ser
reutilizables en toda la aplicación.

Un bean en el contexto de Spring Framework es un objeto gestionado por el contenedor


de Spring. En términos más simples, representa un componente o una instancia de una
clase dentro de una aplicación. Lo que lo distingue es que su ciclo de vida, creación,
configuración y destrucción, está gestionado por el contenedor de Spring a través del
mecanismo de Inversión de Control (IoC). Esto significa que el control sobre la creación y
el manejo del objeto no recae en el desarrollador de la aplicación, sino en el contenedor
de Spring.

Además, los beans son reutilizables, lo que promueve la modularidad y eficiencia en el


desarrollo de aplicaciones. Están diseñados para ser configurados una vez y referenciados
en múltiples partes de la aplicación. Los beans también pueden pasar por diferentes fases
en su ciclo de vida, como la creación, inicialización y destrucción, y Spring proporciona
métodos de callback para permitir la ejecución de código personalizado en estas fases.

En resumen, un bean en Spring es una instancia gestionada por Spring que representa un
componente de la aplicación, y su ciclo de vida y configuración son manejados por el
contenedor de Spring, facilitando así la creación de aplicaciones modulares y
mantenibles."

3– ¿Qué es el ámbito de un bean ?

- El ámbito de un bean en Spring define el ciclo de vida y la visibilidad del bean


en el contexto de la aplicación.
- Se especifica mediante la anotación @Scope en la clase del bean
- ámbitos disponibles:

o Singleton (Por defecto y más usado):


 se crea una única instancia del bean por cada contenedor de
Spring.
 Todas las solicitudes de ese bean dentro del mismo contexto de
Spring comparten la misma instancia

@Component
@Scope("singleton")
public class MiBean {
// Implementación del bean
}

o Prototype:
 Cada vez que se solicita el bean, se crea una nueva instancia.
 No comparte el estado entre las diferentes solicitudes.
o Request:
 Crea una nueva instancia del bean para cada solicitud HTTP
 Es útil en aplicaciones web para garantizar que cada solicitud
tenga su propia instancia del vean

o Session:
 Crea una única instancia del bean para cada sesión del usuario
 Es útil en aplicaciones web para mantener el estado específico
del usuario durante toda su sesión.

o Application:
 Similar a Singleton, pero se asocia con la vida de la aplicación
web en lugar del contenedor de Spring.
 Útil en aplicaciones web para compartir información entre
diferentes componentes de la aplicación.

o Websocket:
 Se crea una instancia única por cada sesión WebSocket
 Específico para aplicaciones que utilizan WebSockets

4- ¿Qué son los starters y cuál es su objetivo ?


- Los starters son utilidades que simplifican significativamente la creación y
configuración de aplicaciones
- Su objetivo es proporcionar un conjunto preconfigurado de dependencias
- Estas dependencias tienen un propósito especifico
Los starters están diseñados para facilitar el inicio de nuevos proyectos al proporcionar un
punto de partida común para desarrolladores.

Ventajas:

- Simplifican el proceso de inicio del proyecto


- Estos pueden ser modulares y se pueden combinar según las necesidades del
proyecto
5- ¿Cuáles son los principales verbos HTTP y cómo se pueden implementan con
Spring Boot ?
Un verbo HTTP se emplea para indicar una acción a la API,

- GET – @GetMapping:

Utilizado para recuperar información del servidor


@RestController

public class EjemploController {

@GetMapping("/ruta")

public ResponseEntity<String> obtenerDatos() {

// Lógica para obtener y devolver datos

return ResponseEntity.ok("Datos obtenidos");

o @GetMapping se utiliza para manejar solicitudes GET


o Puede devolver datos directamente o envolverlos en un ResponseEntity
para un control más preciso de la respuesta.
o Puede incluir parámetros en la URL utilizando @RequestParam para
personalizar la consulta.

- POST – @PostMapping:

Utilizado para enviar datos al servidor para crear un nuevo recurso.


@RestController

public class EjemploController {

@PostMapping("/ruta")

public ResponseEntity<String> crearRecurso(@RequestBody Datos datos) {

// Lógica para procesar y almacenar los datos

return ResponseEntity.status(HttpStatus.CREATED).body("Recurso creado");


}

o @PostMapping se utiliza para manejar solicitudes POST.


o La anotación @RequestBody se utiliza para vincular los datos del
cuerpo de la solicitud a un objeto Java.
o Puede manejar la validación de entrada utilizando anotaciones como
@Valid y @RequestBody

- PUT – @PutMapping:

Utilizado para actualizar o crear un recurso en el servidor.


@RestController

public class EjemploController {

@PutMapping("/ruta/{id}")

public ResponseEntity<String> actualizarRecurso(@PathVariable Long id, @RequestBody Datos


datos) {

// Lógica para actualizar el recurso con el ID proporcionado

return ResponseEntity.ok("Recurso actualizado");

o @PutMapping se utiliza para manejar solicitudes PUT


o La anotación @PathVariable se utiliza para recuperar variables de la
URI, como el ID en este caso.
o Puede incluir validaciones y lógica específica de actualización.

- DELETE – @DeleteMapping:

Utilizado para solicitar al servidor que elimine un recurso.


@RestController

public class EjemploController {

@DeleteMapping("/ruta/{id}")

public ResponseEntity<String> eliminarRecurso(@PathVariable Long id) {


// Lógica para eliminar el recurso con el ID proporcionado

return ResponseEntity.ok("Recurso eliminado");

o @DeleteMapping se utiliza para manejar solicitudes DELETE.


o La anotación @PathVariable se utiliza para recuperar variables de la
URI, como el ID en este caso.
o Puede incluir lógica de eliminación y manejo de errores.

- PATCH – @PatchMapping:

Utilizado para aplicar modificaciones parciales a un recurso.


@RestController

public class EjemploController {

@PatchMapping("/ruta/{id}")

public ResponseEntity<String> modificarRecurso(@PathVariable Long id, @RequestBody


Modificaciones modificaciones) {

// Lógica para aplicar modificaciones parciales al recurso con el ID proporcionado

return ResponseEntity.ok("Modificaciones aplicadas");

o @PatchMapping se utiliza para manejar solicitudes PATCH.


o La anotación @RequestBody se utiliza para vincular los datos del
cuerpo de la solicitud a un objeto Java
o Puede incluir lógica específica para aplicar las modificaciones y manejo
de errores.

6- ¿ Qué diferencias existen entre JPA y Hibernate ?

Java Persistence API (JPA):

- JPA es una especificación de Java que define un conjunto de interfaces y


estándares para el manejo de la persistencia de datos en aplicaciones Java
- Proporciona un conjunto de anotaciones y métodos estándar para realizar
operaciones comunes de persistencia, como la creación, actualización y
eliminación de entidades.
- JPA permite la independencia del proveedor, lo que significa que se puede
utilizar con varias implementaciones de persistencia
- Otros proveedores populares incluyen EclipseLink y OpenJPA
- Al seguir las especificaciones de JPA, se puede realizar una configuración
mínima para gestionar la persistencia en la aplicación Esto facilita la migración
entre proveedores de JPA sin cambiar significativamente el código fuente.

@Entity
@Table(name = "usuarios")
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String nombre;


// Otros campos y métodos de acceso
}

Hibernate:

- Es la implementación de JPA utilizada por defecto en Spring Boot,


proporcionando funcionalidades adicionales más allá de las definidas por JPA.
- Hibernate agrega funcionalidades adicionales y extensiones a la especificación
de JPA
- Ofrece características avanzadas como caché de segundo nivel, soporte para
consultas nativas de SQL.
- Aunque Hibernate sigue las especificaciones de JPA, también permite el uso de
funciones específicas de Hibernate cuando es necesario
@Entity
@Table(name = "usuarios")
public class Usuario {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Column(name = "nombre")
private String nombre;

@OneToMany(mappedBy = "usuario")
private List<Orden> ordenes;
// Otros campos y métodos de acceso
}

7- ¿ Qué es Spring Initializr ?

- Es una plataforma online para generar un proyecto base se Spring Boot.


- Se puede usar por la web directamente o desde los principales IDEs como STS o
Intelij

8- ¿ Qué diferencias existen entre @Repository, @Component, @Service &


@Controller ?

- Las anotaciones @Repository, @Component, @Service y @Controller en Spring


Framework son anotaciones de marcado utilizadas para definir roles específicos
de los componentes en una aplicación
- todas ellas son especializaciones de @Component
- cada una tiene un propósito específico en la arquitectura de la aplicación

- No existen diferencias funcionales, solo semánticas.


- Son anotaciones para marcar “clases” en Spring y que se crean beans a
partir de ellas.

Resumen:
 @Repository: Capa de acceso a datos, manejo de excepciones específicas de
la base de datos.
 @Component: Anotación base para componentes de Spring.
 @Service: Capa de servicios de negocio.
 @Controller: Capa de controladores para la presentación (en aplicaciones
Spring MVC).

En resumen, estas anotaciones ayudan a organizar y categorizar los componentes


de una aplicación Spring, proporcionando información al contenedor de Spring
sobre el rol y la funcionalidad de cada componente.

aunque no hay diferencias funcionales, el uso de anotaciones específicas ( @Repository,


@Service, @Controller) enriquece el código con semántica, expresando claramente el
propósito de cada clase en la aplicación Spring.

@Repository:

- @Repository se utiliza para marcar las clases que interactúan con la capa de
persistencia (acceso a datos).
- Se aplica a las clases que actúan como repositorios de datos, generalmente
interfaces que extienden CrudRepository o JpaRepository

@Repository
public interface MiRepositorio extends JpaRepository<Entidad, Long> {
// Métodos de repositorio
}
@Component:

- @Component es la anotación base para todas las anotaciones de Spring. Como


@Repository, @Service y @Controller.
- Anotación genérica utilizada para indicar que una clase es un componente de
Spring y debe ser administrada por el contenedor de Spring.

@Component
public class MiComponente {
// Código de la clase
}

@Service:

- Utilizado para marcar clases de servicios en la capa de negocio.


- Representa la lógica de negocio de la aplicación.
- Es útil para distinguir los servicios de la capa de presentación o acceso a datos.

@Service
public class MiServicio {
// Lógica de negocio
}

@Controller:

- Utilizado para marcar clases de controladores en la capa de presentación


- Gestionan las solicitudes HTTP, interactúan con los servicios y devuelven las
vistas.
- Es responsable de manejar la interacción entre el cliente y el servidor.

@Controller
public class MiControlador {
// Lógica de controlador
}

9- ¿ Explique la anotación @RestController ?

- Es una anotación específica de Spring Framework en Java


- se utiliza para definir un controlador en una aplicación web que devuelve datos
en lugar de vistas completas. En el contexto de Spring MVC (Modelo-Vista-
Controlador)
- estos controladores anotados con @RestController manejan solicitudes HTTP y
devuelven datos directamente en lugar de una vista HTML
- Al agregar esta anotación a una clase, Spring asume automáticamente que cada
método dentro de esa clase anotada con @RequestMapping o cualquier otra
anotación de mapeo similar devolverá directamente datos, como JSON o XML,
en lugar de vistas completas.
- no es necesario anotar cada método individual dentro de la clase con
@ResponseBody (una anotación que indica que el resultado del método debe
escribirse directamente al cuerpo de la respuesta HTTP), ya que @RestController
combina la funcionalidad de @Controller y @ResponseBody en una sola
anotación.

En resumen, la anotación @RestController es una forma conveniente de crear


controladores en Spring que se utilizan específicamente para crear servicios web RESTful
que devuelven datos en lugar de vistas HTML completas. Esto simplifica el desarrollo de
aplicaciones web basadas en Spring que interactúan con clientes que consumen servicios
RESTful, como aplicaciones móviles o aplicaciones de una sola página (SPA).

- @Controller: La anotación @Controller se utiliza para marcar una clase como un


controlador en Spring MVC. Indica que la clase define métodos de manejo de
solicitudes HTTP.

- @ResponseBody: La anotación @ResponseBody se usa para indicar que el valor


devuelto por un método de controlador debe ser serializado directamente en el
cuerpo de la respuesta HTTP, en lugar de buscar una vista para renderizar. Esto
es útil cuando se desea devolver datos en formato JSON, XML u otro formato
que no sea HTML.
10- ¿ Cuál es la función de Spring AOP ?

Spring AOP (Aspect-Oriented Programming) En el contexto, proporciona un mecanismo


para modularizar funcionalidades transversales, como la seguridad, el registro, la
transacción, el caché, etc., de manera que estas preocupaciones no se mezclen con la
lógica principal del negocio.

- permite la aplicación de aspectos a través de la programación declarativa


- Los aspectos son módulos que encapsulan comportamientos transversales y
pueden ser aplicados de manera selectiva a partes específicas del código de la
aplicación

Las características y la funcionalidad clave de Spring AOP incluyen:

- Inyección de código: ermite inyectar automáticamente código en puntos


específicos de una aplicación sin modificar directamente el código fuente de los
componentes

- Aspectos: Los aspectos encapsulan funcionalidades transversales y pueden ser


aplicados de manera selectiva a partes específicas del código.

- Puntos de corte: Los puntos de corte especifican los lugares en el código de la


aplicación donde se puede aplicar un aspecto.

- Consejos (advices): Los consejos son acciones específicas que se ejecutan en


respuesta a un punto de corte particular durante la ejecución del programa. Los
tipos comunes de consejos incluyen "antes", "después" y "alrededor".

- Tipos de consejos: Spring AOP admite diferentes tipos de consejos, como


consejos "antes", que se ejecutan antes de que se invoque un método; consejos
"después", que se ejecutan después de la invocación de un método; y consejos
"alrededor", que pueden controlar completamente el comportamiento de un
método envolviendo su ejecución.
11- ¿ La anotación @Profile que función tiene y porque es importante ?

- se utiliza para definir perfiles específicos de configuración en una aplicación


- Esta anotación permite activar o desactivar determinadas configuraciones de
Spring en función del perfil activo en un entorno de ejecución
- La función principal es proporcionar una manera de modularizar y personalizar
la configuración de una aplicación según diferentes entornos, como desarrollo,
pruebas o producción Esto es importante porque permite mantener
configuraciones específicas para cada entorno

Por ejemplo, supongamos que una aplicación tiene diferentes configuraciones de base de
datos para los entornos de desarrollo y producción. Podemos definir dos clases de
configuración diferentes, una para el entorno de desarrollo y otra para el entorno de
producción, y etiquetarlas con la anotación @Profile indicando los perfiles
correspondientes. Luego, en tiempo de ejecución, podemos activar el perfil deseado
mediante la configuración del entorno, como variables de entorno o propiedades de la
aplicación.

La anotación @Profile es importante porque:

- Facilita la gestión de configuraciones específicas del entorno: Permite


mantener diferentes configuraciones para diferentes entornos de manera clara y
modularizada.

- Promueve la portabilidad del código: Al separar la configuración en perfiles,


el código se vuelve más portátil

- Mejora la seguridad: Al tener configuraciones específicas para cada entorno,


se reduce el riesgo de exponer información sensible o realizar cambios
accidentales en la configuración en entornos no deseados.

@Configuration public class DevelopmentDatabaseConfig

@Profile("development") // Configuración de la base de datos de


desarrollo
} public class ProductionDatabaseConfig {

@Configuration // Configuración de la base de datos de


producción
@Profile("production")
}

12- ¿ Qué hace la anotación @SpringBootApplication internamente ?

- combina varias anotaciones en una sola, simplificando la configuración y el


arranque de una aplicación Spring Boot
- Internamente, la anotación @SpringBootApplication realiza varias tareas
importantes para configurar y ejecutar una aplicación Spring Boot:

o @Configuration:
 indica que la clase anotada es una fuente de definiciones de
beans para el contexto de la aplicación
 Esto significa que la clase puede contener métodos anotados
con @Bean que definan y configuren los beans de la aplicación.

o @EnableAutoConfiguration:
 Esta anotación activa la configuración automática de Spring
Boot.
 pring Boot intentará automáticamente configurar la aplicación
basándose en las dependencias que se han agregado al proyecto
y las clases que se encuentran en el classpath.

o @ComponentScan:
 Esta anotación escanea el paquete base de la aplicación y todos
los subpaquetes en busca de componentes anotados, como
@Component, @Service, @Repository y @Controller, entre otros

o Bootstrap de la aplicación:
 proporciona un punto de entrada para la aplicación Spring Boot
 Cuando se ejecuta una clase anotada con
@SpringBootApplication, Spring Boot inicia automáticamente la
aplicación, configurando el contexto de la aplicación y
arrancando el servidor embebido

- Escaneo de componentes en el paquete base y sus subpaquetes.


- Configuración automática basada en las dependencias y las condiciones del
entorno
- Configuración del entorno de la aplicación
- Inicialización del contexto de la aplicación.
- Configuración de características específicas de Spring Boot, como el manejo de
propiedades de aplicación y perfiles activos.
13- ¿ Qué patrones están presentes en Spring / Spring Boot, agregue algún ejemplo ?

- Inyección de Dependencias (Dependency Injection): Este patrón permite


que los objetos dependientes sean proporcionados externamente en lugar de
que un objeto los cree internamente.
o Un ejemplo: la inyección de dependencias de beans a través de
anotaciones como @Autowired en Spring.

- Creacional: Singleton: Spring utiliza el patrón de diseño Singleton para


gestionar la creación y el ciclo de vida de los beans por defecto.
o Por defecto, los beans en Spring son singletons, lo que significa que solo
hay una instancia de cada bean en el contexto de la aplicación

- Estructural: Proxy: El patrón Proxy se utiliza para proporcionar un objeto


representativo que controla el acceso al objeto real. En Spring, el patrón Proxy
se utiliza para implementar la funcionalidad de la transacción, el manejo de la
seguridad, la recuperación perezosa y otros aspectos
o en el manejo de transacciones:

- Comportamiento: Cache: El patrón de Cache se utiliza para almacenar en


caché los resultados de operaciones costosas para mejorar el rendimiento.
o Spring proporciona soporte para el caché a través de la anotación
@Cacheable

- Comportamiento: Template: El patrón Template se utiliza para definir la


estructura de un algoritmo y permitir que las subclases redefinan ciertos pasos
del algoritmo sin cambiar su estructura general.
o En Spring, el patrón Template se utiliza en el marco de trabajo Spring
JDBC, donde se proporcionan clases base con métodos de plantilla para
realizar operaciones de acceso a datos.

- Factory Method: Spring hace un uso extensivo de los Factory Methods para
crear y configurar beans en el contexto de la aplicación. Los Factory Methods
permiten la creación de beans de forma dinámica y personalizada.
- Patrón Observer: Spring hace uso del patrón Observer a través de eventos de
aplicación. Los eventos en Spring permiten a los componentes de la aplicación
escuchar y responder a eventos específicos que ocurren dentro del contexto de
la aplicación.

14- ¿Para que se usa @Transactional ?

- La anotación @Transactional en Spring se utiliza para definir la transaccionalidad


de un método o clase
- Este mecanismo garantiza que una serie de operaciones relacionadas se
ejecuten como una sola unidad
- significa que todas las operaciones se completan con éxito o ninguna se realiza
en absoluto. Esto ayuda a mantener la integridad y consistencia de los datos en
la base de datos.

La atomicidad es una propiedad de las transacciones que garantiza que todas las
operaciones dentro de la transacción se ejecuten con éxito o que ninguna se ejecute en
absoluto. Con @Transactional, si algo sale mal durante la ejecución de un método anotado,
Spring se asegura de revertir todas las operaciones realizadas dentro de la transacción,
devolviendo la base de datos a su estado inicial.

Puedes aplicar la anotación @Transactional a nivel de método o clase. Cuando se aplica a


nivel de método, la transacción se aplica solo a ese método específico. Cuando se aplica a
nivel de clase, la transacción se aplica a todos los métodos de la clase

15- ¿ Qué es la inyección de dependencias y como la implementa Spring ?

es un patrón de diseño en el que los objetos no crean directamente sus dependencias, sino
que se les proporcionan desde el exterior y Su objetivo principal es separar las
responsabilidades y reducir el acoplamiento entre componentes de una aplicación.

1- Definición de Beans: En Spring, los componentes de la aplicación, como servicios,


repositorios, controladores, etc., son gestionados por el contenedor de Spring y se
definen como beans. Estos beans son objetos que Spring instancia, configura y
administra.
2- Configuración del Contexto de la Aplicación: Spring permite definir la
configuración de la aplicación a través de archivos XML, anotaciones o clases de
configuración Java. En estos archivos o clases, se especifica qué beans deben
crearse y cómo deben configurarse.

- 3- Inyección de Dependencias

- Inyección de dependencias por constructor: Esto significa que el contenedor


de Spring crea los beans necesarios y los pasa como argumentos al constructor
de la clase que los necesita.

public class MiClase {


private Dependencia dependencia;

public MiClase(Dependencia dependencia) {


this.dependencia = dependencia;
}
}

- Inyección de dependencias por setter: En este enfoque, Spring invoca los


métodos setter de la clase para establecer las dependencias necesarias.

public class MiClase {


private Dependencia dependencia;

public void setDependencia(Dependencia dependencia) {


this.dependencia = dependencia;
}
}

- Inyección de dependencias por campo: Spring también puede inyectar


dependencias directamente en los campos de una clase utilizando la anotación
@Autowired.

public class MiClase {


@Autowired
private Dependencia dependencia;
}

En cualquiera de los casos anteriores, Spring se encarga de administrar las dependencias


de los beans en el contexto de la aplicación. Cuando se crea un bean, Spring verifica las
dependencias que ese bean necesita y las resuelve automáticamente, ya sea buscando en
el contexto de la aplicación o creando nuevas instancias si es necesario.

16-Cuáles formas de inyección de dependencias que existen en Spring y cuál es la


más adecuada ?

1- Inyección por Atributo: En esta forma de inyección, las dependencias se inyectan


directamente en los atributos de la clase utilizando la anotación @Autowired. Esta
es la forma más concisa y simple de realizar la inyección de dependencias, pero
puede ser menos flexible en comparación con las otras formas.

@Service
public class MiServicio {
@Autowired
private MiRepositorio miRepositorio;
}

2- Inyección por Setter: las dependencias se inyectan utilizando métodos setters.


Esta forma permite una configuración más flexible de las dependencias, ya que se
pueden cambiar en tiempo de ejecución, pero requiere la existencia de métodos
setters para cada dependencia.

@Service
public class MiServicio {
private MiRepositorio miRepositorio;

@Autowired
public void setMiRepositorio(MiRepositorio miRepositorio) {
this.miRepositorio = miRepositorio;
}
}

3- Inyección por Constructor:: La inyección por constructor implica inyectar


dependencias a través del constructor de la clase. Esta es considerada la forma más
recomendada y adecuada de realizar la inyección de dependencias en Spring, ya
que promueve una mejor testabilidad de las aplicaciones y hace que las
dependencias sean explícitas desde el principio.

@Service
public class MiServicio {
private final MiRepositorio miRepositorio;

@Autowired
public MiServicio(MiRepositorio miRepositorio) {
this.miRepositorio = miRepositorio;
}
}

¿Cuál es la más adecuada?:

La inyección por constructor se considera generalmente la forma más adecuada de realizar


la inyección de dependencias en Spring

- Testabilidad: Facilita la escritura de pruebas unitarias, ya que las dependencias


se pasan explícitamente al constructor

- Inmutabilidad: Los campos finales pueden ser inyectado

- Claridad y Explicitud: Las dependencias son claramente visibles en el


constructor, lo que hace que el código sea más fácil de entender y mantener.

17-¿ Para que se usa @Value y que lenguaje usa la anotación para su función ?

- en Spring se utiliza para inyectar valores de propiedades desde archivos de


configuración de la aplicación en campos de beans administrados por Spring
- Estos valores pueden provenir de archivos de propiedades, archivos YAML,
variables de entorno u otras fuentes de configuración externa
- permite leer estas configuraciones y asignarlas a los campos anotados, lo que
proporciona una forma conveniente de configurar y personalizar el
comportamiento de los componentes de la aplicación.
- El lenguaje que utiliza es para su función es SpEL, que significa Spring
Expression Language

Supongamos que tenemos un archivo de propiedades application.properties con la


siguiente configuración:
miapp.mensaje = Hola desde la configuración

Podemos inyectar este valor en un campo de un bean utilizando la anotación @Value:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class MiComponente {

@Value("${miapp.mensaje}")
private String mensaje;

public void mostrarMensaje() {


System.out.println(mensaje);
}
}
18-¿ Cuál es el puerto por defecto de una aplicación Spring Boot y cómo
podemos cambiarlo ?

- Por defecto el puerto es 8080


- Se cambia en la propiedad server.port del fichero de configuración.

19- ¿ Qué es Spring Actuator ?

Spring Actuator es un módulo de Spring Boot que proporciona una serie de herramientas
de monitoreo y administración para aplicaciones basadas en Spring Boot ademas
gestionaruna aplicación Spring Boot que este en produccion

ofrece endpoints HTTP listos para usar que proporcionan información sobre el estado de la
aplicación, la salud, las métricas, la información de la configuración, entre otros aspectos
importantes.

- Endpoints predefinidos: Actuator habilita varios endpoints predefinidos que


ofrecen información sobre diferentes aspectos de la aplicación. Algunos de los
endpoints comunes incluyen:
 /health: Proporciona información sobre el estado de la aplicación,
como si está en ejecución y si todos los servicios requeridos
están disponibles.
 /info: Ofrece información adicional sobre la aplicación, que puede
ser personalizada para incluir detalles específicos del entorno o
la versión de la aplicación.
 /metrics: Expone métricas sobre el rendimiento de la aplicación,
como el uso de memoria, las solicitudes HTTP y otros
indicadores clave.
- Métricas: Actuator recopila y expone métricas sobre la aplicación, como el uso
de la CPU, la memoria, el número de solicitudes HTTP, etc. Estas métricas son
útiles para monitorear el rendimiento y la salud de la aplicación.

- Seguridad y autorización: Actuator proporciona soporte para asegurar los


endpoints, lo que permite configurar políticas de seguridad y autorización para
controlar el acceso a la información sensible expuesta por los endpoints.

- Extensibilidad: Spring Actuator se puede extender para agregar nuevos


endpoints personalizados que expongan información específica de la aplicación
según las necesidades del desarrollador. Esto permite integrar Actuator con
sistemas de monitoreo y herramientas de administración de terceros.

- Integración con otras herramientas: Actuator se integra fácilmente con otras


herramientas de monitoreo y administración, como Prometheus, Grafana, y
otras, lo que facilita la integración de Spring Boot en entornos de monitoreo ya
existentes.

Para habilitar Spring Actuator en una aplicación Spring Boot:

- simplemente necesitas agregar la dependencia adecuada en el archivo pom.xml


o build.gradle de tu proyecto. Por ejemplo, para Maven:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

Una vez agregada la dependencia, los endpoints de Actuator estarán disponibles para su
uso en tu aplicación Spring Boot. Puedes acceder a estos endpoints a través de HTTP para
obtener información sobre el estado y el rendimiento de tu aplicación en tiempo de
ejecución.

20-¿Qué es Spring Cloud?


- es un conjunto de herramientas y bibliotecas basadas en Spring Boot que
facilitan el desarrollo de aplicaciones distribuidas y orientadas a microservicios
en entornos de nube
- proporciona soluciones listas para producción para problemas comunes que
surgen al construir sistemas distribuidos, como la configuración distribuida, el
enrutamiento, la recuperación de fallas y la monitorización.

Algunos de los componentes más conocidos de Spring Cloud son:

- Spring Cloud Config: Permite la gestión centralizada de la configuración de


aplicaciones distribuidas. Con Spring Cloud Config, puedes almacenar la
configuración de tus aplicaciones en un repositorio centralizado (como Git) y
luego acceder a ella desde tus aplicaciones en tiempo de ejecución.

- Spring Cloud Gateway: Es un gateway de API basado en Spring Boot que


proporciona enrutamiento, filtrado y otras características para manejar las
solicitudes HTTP entrantes y dirigirlas a los servicios adecuados en una
arquitectura de microservicios.

Además de estos componentes, Spring Cloud ofrece una amplia gama de funcionalidades
adicionales, como la detección de servicios, el equilibrio de carga, la seguridad, la
tolerancia a fallos y la gestión de la latencia, todo ello diseñado para simplificar el
desarrollo y la operación de aplicaciones distribuidas en entornos de nube.

En resumen, Spring Cloud es una suite de herramientas y bibliotecas que facilitan el


desarrollo de aplicaciones basadas en microservicios y diseñadas para su implementación
en la nube. Proporciona soluciones listas para producción para problemas comunes
asociados con la construcción de sistemas distribuidos, permitiendo a los desarrolladores
centrarse en la lógica de negocio de sus aplicaciones en lugar de en las complejidades de
la infraestructura.

También podría gustarte