La anotación @RequestScoped
en Spring Boot se utiliza para definir el alcance de un bean al nivel de una solicitud HTTP. Esto significa que el bean solo existirá durante la duración de una única petición. Este alcance es útil cuando necesitas que el estado de un bean se mantenga aislado para cada solicitud, como cuando se manejan datos específicos del usuario, sesiones cortas o información temporal.
La anotación @RequestScoped
proviene de la especificación de Contexts and Dependency Injection (CDI) en Java (javax.enterprise.context.RequestScoped
) y se usa principalmente en aplicaciones Java EE. En Spring Boot, se puede utilizar con el soporte de CDI o usando la alternativa @Scope("request")
del framework de Spring para definir un bean con el alcance de solicitud.
Cuando un bean se define como @RequestScoped
, Spring crea una nueva instancia del bean para cada solicitud HTTP y la destruye cuando la solicitud finaliza. Esto garantiza que cada petición tenga su propio bean independiente, sin compartir datos entre diferentes solicitudes.
Para usar @RequestScoped
en Spring Boot, se deben realizar algunas configuraciones adicionales, como asegurarse de que la aplicación está configurada con el soporte de CDI (spring-boot-starter-web
y spring-boot-starter-data-cdi
), o se puede optar por la anotación @Scope
de Spring para lograr el mismo comportamiento.
A continuación, se muestra un ejemplo de cómo usar @RequestScoped
en un bean:
import javax.enterprise.context.RequestScoped;
import org.springframework.stereotype.Component;
@Component
@RequestScoped
public class MiBeanRequest {
private String mensaje;
public String getMensaje() {
return mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
}
@Scope("request")
de Spring
Si no se desea usar CDI, se puede emplear la anotación de Spring @Scope
para definir el alcance de un bean:
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
@Component
@Scope("request")
public class MiBeanRequest {
private String mensaje;
public String getMensaje() {
return mensaje;
}
public void setMensaje(String mensaje) {
this.mensaje = mensaje;
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/mensaje")
public class MensajeController {
@Autowired
private MiBeanRequest miBeanRequest;
@GetMapping
public String obtenerMensaje() {
miBeanRequest.setMensaje("Mensaje único para esta solicitud.");
return miBeanRequest.getMensaje();
}
}
1. Bean MiBeanRequest
:
@RequestScoped
o @Scope("request")
, lo que indica que su ciclo de vida se limita a la duración de una solicitud HTTP.
2. Controlador MensajeController
:
MiBeanRequest
y establece un mensaje específico para cada solicitud usando setMensaje()
.
/mensaje
, el mensaje será único para cada petición y no compartido entre diferentes solicitudes.
Para más información, puedes consultar la documentación oficial de Spring.
Jorge García
Fullstack developer