Spring Framework es un marco de aplicación y un contenedor de control de inversión para la plataforma Java . [2] Las características principales del marco pueden ser utilizadas por cualquier aplicación Java, pero existen extensiones para crear aplicaciones web sobre la plataforma Java EE (Enterprise Edition). El marco no impone ningún modelo de programación específico . [ cita necesaria ] . El marco se ha vuelto popular en la comunidad Java como una adición al modelo Enterprise JavaBeans (EJB). [3] Spring Framework es un software gratuito y de código abierto . [4] : 121–122 [5]
La primera versión fue escrita por Rod Johnson , quien lanzó el marco con la publicación de su libro Expert One-on-One J2EE Design and Development en octubre de 2002. El marco se lanzó por primera vez bajo la licencia Apache 2.0 en junio de 2003. La primera producción La versión 1.0 se lanzó en marzo de 2004. [6] El marco Spring 1.2.6 ganó un premio de productividad Jolt y un premio JAX a la innovación en 2006. [7] [8] Spring 2.0 se lanzó en octubre de 2006, Spring 2.5 en noviembre 2007, Spring 3.0 en diciembre de 2009, Spring 3.1 en diciembre de 2011 y Spring 3.2.5 en noviembre de 2013. [9] Spring Framework 4.0 se lanzó en diciembre de 2013. [10] Las mejoras notables en Spring 4.0 incluyeron soporte para Java SE (Estándar Edition) 8, Groovy 2, [11] [12] algunos aspectos de Java EE 7 y WebSocket . [13]
Spring Framework 4.2.0 se lanzó el 31 de julio de 2015 y se actualizó inmediatamente a la versión 4.2.1, que se lanzó el 1 de septiembre de 2015. [14] Es "compatible con Java 6, 7 y 8, con un enfoque en mejoras principales y capacidades web modernas" . [15]
Spring Framework 4.3 se lanzó el 10 de junio de 2016 y fue compatible hasta 2020. [16] Se anunció que "sería la generación final dentro de los requisitos generales del sistema Spring 4 (Java 6+, Servlet 2.5+), [...] " . [15]
Se anuncia que Spring 5 se basará en Reactor Core compatible con Reactive Streams . [17] [ fuente obsoleta ]
Spring Framework 6.0 se lanzó el 16 de noviembre de 2022 y vino con una línea base Java 17+ y un cambio a Jakarta EE 9+ (en el jakarta
espacio de nombres), con un enfoque en las API Jakarta EE 10 lanzadas recientemente , como Servlet 6.0 y JPA 3.1. . [18]
Spring Framework incluye varios módulos que brindan una variedad de servicios:
BeanFactory
y ApplicationContext
). [20] [21] [22] En este contexto, spring-core
el artefacto [23] que se encuentra en el módulo principal [24] pertenece al org.springframework
grupo. [25] El spring-core
artefacto consta del contenedor IoC, así como de las clases de utilidad [23] utilizadas en toda la aplicación. [26]spring-aop
un artefacto para el marco AOP. [24]spring-jdbc
un artefacto que se encuentra en el módulo JDBC y admite el acceso a JDBC al incluir clases de configuración de fuente de datos. [24]spring-websocket
.spring-oxm
.Los módulos Spring están empaquetados como archivos JAR. [46] Se puede acceder a estos artefactos a través del Repositorio Central de Maven usando Maven [47] o Gradle . [48]
El contenedor de inversión de control (IoC) es el contenedor principal de Spring Framework. [2] Proporciona un medio consistente para configurar y administrar objetos Java [2] [4] : 127–131 usando la reflexión . [49] El contenedor es responsable de gestionar los ciclos de vida de objetos específicos: [4] : 128 creando estos objetos, [50] llamando a sus métodos de inicialización , [49] y configurando estos objetos conectándolos entre sí. [51]
En muchos casos, no es necesario utilizar el contenedor cuando se utilizan otras partes de Spring Framework, aunque su uso probablemente hará que la aplicación sea más fácil de configurar y personalizar. El contenedor Spring proporciona un mecanismo consistente para configurar aplicaciones [4] : 122 y se integra con casi todos los entornos Java, desde aplicaciones de pequeña escala hasta aplicaciones empresariales de gran tamaño.
El programador no crea directamente un objeto, sino que describe cómo debe crearse definiéndolo en el archivo de configuración de Spring. De manera similar, los servicios y componentes no se llaman directamente; en cambio, un archivo de configuración de Spring define qué servicios y componentes deben llamarse. Este IoC tiene como objetivo aumentar la facilidad de mantenimiento y pruebas.
Los objetos creados por el contenedor se denominan objetos administrados o beans . [52] El contenedor se puede configurar cargando archivos XML (lenguaje de marcado extensible) [50] [4] : 151–152 o detectando anotaciones Java específicas en clases de configuración. Estas fuentes de datos contienen las definiciones de beans que proporcionan la información necesaria para crear los beans.
Es @Configuration
una anotación específica de Spring que marca una clase como clase de configuración. La clase de configuración proporciona los beans a Spring ApplicationContext
. [53] Cada uno de los métodos en la clase de configuración Spring se configura con la @Bean
anotación. Luego, la ApplicationContext
interfaz devolverá los objetos configurados con la @Bean
anotación como beans. La ventaja de la configuración basada en Java sobre la configuración basada en XML es una mejor seguridad de tipos y refactorabilidad. [53]
Existen varios tipos de Inversión de Control. La inyección de dependencia y la búsqueda de dependencia son ejemplos de inversión de control. [54] Los objetos se pueden obtener mediante búsqueda de dependencia o inyección de dependencia. [4] : 127 [55]
La inyección de dependencia es un patrón en el que el contenedor pasa objetos [4] : 128 por nombre a otros objetos, a través de constructores , [4] : 128 propiedades o métodos de fábrica . Hay varias formas de implementar la inyección de dependencia: inyección de dependencia basada en constructor, inyección de dependencia basada en setter e inyección de dependencia basada en campos. [56]
La búsqueda de dependencia es un patrón en el que una persona que llama solicita al objeto contenedor un objeto con un nombre específico o de un tipo específico.
El marco Spring tiene una característica conocida como cableado automático, que utiliza el contenedor Spring para satisfacer automáticamente las dependencias especificadas en las propiedades de JavaBean con objetos del tipo apropiado en la fábrica actual. [57] Esto solo puede ocurrir si solo hay un objeto con el tipo apropiado. [57]
Hay varias anotaciones que se pueden usar para POJO de cableado automático, incluida la anotación específica de Spring @Autowire
(así como varias otras anotaciones específicas de Spring que ayudan a resolver la ambigüedad del cableado automático, como las anotaciones @Qualifier
o @Primary
), [58] [59] y el estándar Java anotaciones @Resource
y @Inject
. [60]
La @Qualifier
anotación se puede usar en una clase que define un bean para informar a Spring que dé prioridad a la creación del bean al conectarlo automáticamente por nombre. [59]
La @Primary
anotación se puede usar en una clase que define un bean para informar a Spring que dé prioridad a la creación del bean al cablearlo automáticamente por tipo. [59]
La @Resource
anotación es una anotación que se ajusta a JSR 250 , o Anotaciones comunes para la plataforma Java. La @Resource
anotación se utiliza para referencias de cableado automático a POJO por nombre. [60] La @Inject
anotación es una anotación que se ajusta a JSR 300, o Anotaciones estándar para inyección. La @Inject
anotación se utiliza para referencias de cableado automático a POJO por tipo. [60]
Spring Framework tiene su propio marco de programación orientada a aspectos (AOP) que modulariza las preocupaciones transversales en aspectos . [61] La motivación para crear un marco AOP separado es proporcionar características básicas de AOP sin demasiada complejidad en el diseño, implementación o configuración. El marco Spring AOP aprovecha al máximo el contenedor Spring.
El marco Spring AOP se basa en patrones proxy . [62] [24] Se configura en tiempo de ejecución . [ cita necesaria ] Esto elimina la necesidad de un paso de compilación o tejido en tiempo de carga. [ cita necesaria ] Por otro lado, la interceptación solo permite la ejecución de métodos públicos en objetos existentes en un punto de unión . [ cita necesaria ]
En comparación con el marco AspectJ , Spring AOP es menos poderoso, pero también menos complicado. [ cita necesaria ] Spring 1.2 incluye soporte para configurar aspectos de AspectJ en el contenedor. Spring 2.0 agregó más integración con AspectJ; por ejemplo, el lenguaje pointcut se reutiliza y se puede mezclar con aspectos basados en Spring AOP. [ cita necesaria ] Además, Spring 2.0 agregó una biblioteca Spring Aspects que usa AspectJ para ofrecer características comunes de Spring, como la gestión de transacciones declarativas [62] y la inyección de dependencia a través del tiempo de compilación de AspectJ o el tejido en tiempo de carga. [63] SpringSource utiliza AspectJ AOP en otros proyectos de Spring como Spring Roo y Spring Insight, y Spring Security ofrece una biblioteca de aspectos basada en AspectJ. [ cita necesaria ]
Spring AOP ha sido diseñado para trabajar con preocupaciones transversales dentro de Spring Framework. [4] : 473 Cualquier objeto creado y configurado por el contenedor se puede enriquecer utilizando Spring AOP.
Spring Framework utiliza Spring AOP internamente para gestión de transacciones, seguridad, acceso remoto y JMX . [ cita necesaria ]
Desde la versión 2.0 del marco, Spring proporciona dos enfoques para la configuración de AOP:
@AspectJ
-estilo de anotación basado en. [65] [ se necesita una mejor fuente ]<beans xmlns= "http://www.springframework.org/schema/beans" xmlns:mvc= "http://www.springframework.org/schema/mvc" xmlns:xsi= "http://www.w3 .org/2001/XMLSchema-instance" xmlns:aop= "http://www.springframework.org/schema/aop" xmlns:context= "http://www.springframework.org/schema/context" xsi:schemaLocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http:/ /www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http: //www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd" >
El equipo de Spring decidió no introducir nueva terminología relacionada con AOP. Por lo tanto, en la documentación de referencia y la API de Spring, términos como aspecto , punto de unión, consejo , corte de punto, introducción, objeto de destino (objeto recomendado), proxy AOP y tejido tienen los mismos significados [ cita requerida ] que en la mayoría de los demás AOP. marcos (particularmente AspectJ).
El marco de acceso a datos de Spring aborda las dificultades comunes que enfrentan los desarrolladores cuando trabajan con bases de datos en aplicaciones. Se proporciona soporte para todos los marcos de acceso a datos populares en Java: JDBC, iBatis / MyBatis , [32] Hibernate , [32] Java Data Objects (JDO, descontinuado desde 5.x), [32] Jakarta Persistence API (JPA), [ 32] Oracle TopLink , Apache OJB y Apache Cayenne , entre otros.
Para todos estos marcos compatibles, Spring proporciona estas características
Todas estas características están disponibles cuando se utilizan clases de plantilla proporcionadas por Spring para cada marco compatible. [67] Los críticos han dicho que estas clases de plantilla son intrusivas y no ofrecen ninguna ventaja sobre el uso (por ejemplo) de la API de Hibernate directamente. [68] [ verificación fallida ] En respuesta, los desarrolladores de Spring han hecho posible utilizar las API de Hibernate y JPA directamente. Sin embargo, esto requiere una gestión de transacciones transparente, ya que el código de la aplicación ya no asume la responsabilidad de obtener y cerrar los recursos de la base de datos [69] y no admite la traducción de excepciones. [70]
Junto con la gestión de transacciones de Spring, su marco de acceso a datos ofrece una abstracción flexible para trabajar con marcos de acceso a datos. Spring Framework no ofrece una API de acceso a datos común; en cambio, toda la potencia de las API compatibles se mantiene intacta. [ cita necesaria ] Spring Framework es el único marco disponible en Java que ofrece entornos de acceso a datos administrados fuera de un servidor o contenedor de aplicaciones. [71] [ se necesita una mejor fuente ]
Al utilizar Spring para la gestión de transacciones con Hibernate, es posible que sea necesario configurar los siguientes beans:
Datasource
me gusta com.mchange.v2.c3p0.ComboPooledDataSource
o org.apache.commons.dbcp.BasicDataSource
[32]SessionFactory
me gusta org.springframework.orm.hibernate3.LocalSessionFactoryBean
con un DataSource
atributo [72] [4] : 173 HibernateProperties
[4] : 173 me gustaorg.springframework.beans.factory.config.PropertiesFactoryBean
TransactionManager
me gusta org.springframework.orm.hibernate3.HibernateTransactionManager
con un SessionFactory
atributo [72]Otros puntos de configuración incluyen:
El marco de gestión de transacciones de Spring aporta un mecanismo de abstracción a la plataforma Java. [73] Su abstracción es capaz de:
En comparación, Java Transaction API (JTA) solo admite transacciones anidadas y transacciones globales, y requiere un servidor de aplicaciones (y, en algunos casos, la implementación de aplicaciones en un servidor de aplicaciones).
Spring Framework incluye PlatformTransactionManager
[75] para una serie de estrategias de gestión de transacciones:
JtaTransactionManager
[76] [4] : 255–257 y UserTransaction
[4] : 234 Además de este mecanismo de abstracción, el marco proporciona dos formas de agregar gestión de transacciones a las aplicaciones:
TransactionTemplate
[77]@Transactional
, [62] , etc.)Junto con el marco de acceso a datos de Spring, que integra el marco de gestión de transacciones, es posible configurar un sistema transaccional mediante configuración sin tener que depender de JTA o EJB . El marco transaccional también se integra con motores de mensajería [78] y almacenamiento en caché [79] .
Spring Framework presenta su propio marco de aplicación web modelo-vista-controlador (MVC) , [35] que no estaba planeado originalmente. Los desarrolladores de Spring decidieron escribir su propio marco web como reacción a lo que percibieron como un diseño deficiente del (entonces) popular marco web Jakarta Struts , [80] [ verificación fallida ] , así como deficiencias en otros marcos disponibles. En particular, sintieron que había una separación insuficiente entre las capas de presentación y manejo de solicitudes, y entre la capa de manejo de solicitudes y el modelo. [81]
Al igual que Struts, Spring MVC es un marco basado en solicitudes. [4] : 375 El marco define interfaces de estrategia [4] : 144 para todas las responsabilidades que debe manejar un marco moderno basado en solicitudes. El objetivo de cada interfaz es ser simple y clara para que sea fácil para los usuarios de Spring MVC escribir sus propias implementaciones, si así lo desean. MVC allana el camino para un código frontal más limpio. Todas las interfaces están estrechamente acopladas a la API de Servlet . Algunos ven este estrecho acoplamiento con la API de Servlet como un fracaso por parte de los desarrolladores de Spring al ofrecer un alto nivel de abstracción para aplicaciones basadas en Web [ cita requerida ] . Sin embargo, este acoplamiento garantiza que las funciones de la API de Servlet permanezcan disponibles para los desarrolladores y, al mismo tiempo, ofrece un marco de alta abstracción para facilitar el trabajo con ella.
La DispatcherServlet
clase es el controlador frontal [82] del framework y es responsable de delegar el control a las distintas interfaces durante las fases de ejecución de una solicitud HTTP . [83]
Las interfaces más importantes definidas por Spring MVC y sus responsabilidades se enumeran a continuación: [84]
Controller
: interviene Model
y View
gestiona las solicitudes entrantes y redirige a la respuesta adecuada. [85] Controller
asignará la solicitud http a los métodos correspondientes. [86] Actúa como una puerta que dirige la información entrante. Cambia entre entrar Model
o View
.HandlerAdapter
: responsable de la ejecución de objetos que manejan solicitudes entrantes. [87]HandlerInterceptor
: responsable de interceptar las solicitudes entrantes. [87] Comparable, pero no igual a los filtros de Servlet [4] : 509 (el uso es opcional [4] : 511 y no está controlado por DispatcherServlet
).HandlerMapping
: responsable de seleccionar objetos que manejan solicitudes entrantes (controladores) en función de cualquier atributo o condición interna o externa a esas solicitudes [83]LocaleResolver
: responsable de resolver y, opcionalmente, guardar la configuración regional de un usuario individual. [88]MultipartResolver
: facilita el trabajo con cargas de archivos ajustando las solicitudes entrantes. [89]View
: responsable de devolver una respuesta al cliente. No View
debe contener ninguna lógica empresarial y solo debe presentar los datos encapsulados por el archivo Model
. [35] Algunas solicitudes pueden ir directamente View
sin ir a la Model
pieza; otros pueden pasar por los tres.ViewResolver
: responsable de seleccionar un View
nombre lógico para View
[90] [91] (el uso no es estrictamente obligatorio [4] : 511 ).Model
: responsable de encapsular los datos comerciales. [90] El controlador lo Model
expone a la vista. [4] : 374 (su uso no es estrictamente obligatorio).Cada interfaz de estrategia anterior tiene una responsabilidad importante en el marco general. Las abstracciones que ofrecen estas interfaces son poderosas, por lo que permiten un conjunto de variaciones en sus implementaciones. [4] : 144 Spring MVC incluye implementaciones de todas estas interfaces y ofrece un conjunto de funciones además de la API de Servlet. Sin embargo, los desarrolladores y proveedores son libres de escribir otras implementaciones. Spring MVC utiliza la interfaz Java java.util.Map
como una abstracción orientada a datos para donde Model
se espera que las claves sean String
valores. [ cita necesaria ]
La facilidad para probar las implementaciones de estas interfaces es una ventaja importante del alto nivel de abstracción que ofrece Spring MVC. [92] [4] : 324 DispatcherServlet
está estrechamente acoplado a la inversión Spring del contenedor de control para configurar las capas web de las aplicaciones. Sin embargo, las aplicaciones web pueden usar otras partes de Spring Framework, incluido el contenedor, y optar por no usar Spring MVC.
Cuando un usuario hace clic en un enlace o envía un formulario en su navegador web, la solicitud va a Spring DispatcherServlet
. DispatcherServlet
es un controlador frontal en Spring MVC. [83] [93] Es DispatcherServlet
altamente personalizable y flexible. [93] Específicamente, es capaz de manejar más tipos de controladores que cualquier implementación org.
springframework.web.servlet.mvc.Controller
o org.
springframework.stereotype.Controller
clase anotada. [93] Consulta una o más asignaciones de controladores. [83] DispatcherServlet
elige un controlador apropiado y le envía la solicitud. Procesa Controller
la solicitud particular y genera un resultado. Es conocido como Model
. Esta información debe formatearse en html o cualquier tecnología de interfaz de usuario como Jakarta Server Pages (también conocida como JSP) [83] [94] o Thymeleaf . [94] Esta es la versión View
de una solicitud. [83] Toda la información está en el objeto Model
And View
. Cuando el controlador no está acoplado a una vista particular, DispatcherServlet
encuentra la vista real View
(como JSP) con la ayuda de ViewResolver
. [83] [4] : 390–391
A partir de la versión 3.0 de la especificación de servlet, existen algunas formas de configurar DispatcherServlet: [95]
web.xml
como se muestra a continuación: [95]<servlet> <nombre-servlet> MyServlet </nombre-servlet> <clase-servlet> org.springframework.web.servlet.DispatcherServlet </servlet-clase> </servlet> <servlet-mapping> <servlet-name> MyServlet </servlet-name> <url-pattern> / <url-pattern> </servlet-mapping>
web-fragment.xml
[95]javax.servlet.ServletContainerInitializer
[95] org.springframework.web.WebApplicationInitializer
interfaz. [95]SpringBootServletInitializer
clase. [95]El marco de acceso remoto de Spring es una abstracción para trabajar con varias tecnologías basadas en RPC ( llamada a procedimiento remoto ) disponibles en la plataforma Java tanto para la conectividad del cliente como para la clasificación de objetos en los servidores. [96] La característica más importante que ofrece este marco es facilitar la configuración y el uso de estas tecnologías tanto como sea posible combinando inversión de control y AOP.
El marco proporciona recuperación de fallas (reconexión automática después de una falla de conexión) y algunas optimizaciones para el uso del lado del cliente de beans de sesión remotos sin estado EJB .
Spring brinda soporte para estos protocolos y productos listos para usar
Apache CXF proporciona integración con Spring Framework para la exportación de objetos estilo RPC en el lado del servidor. [99]
La configuración del cliente y del servidor para todos los protocolos y productos de estilo RPC admitidos por el marco de acceso remoto de Spring (excepto el soporte de Apache Axis) se configura en el contenedor Spring Core.
Existe una implementación alternativa de código abierto (Cluster4Spring) de un subsistema de comunicación remota incluido en Spring Framework que está destinado a admitir varios esquemas de comunicación remota (1-1, 1-muchos, descubrimiento de servicios dinámicos). [ cita necesaria ]
Spring Boot Extension es la solución de convención sobre configuración de Spring para crear aplicaciones independientes , de nivel de producción [100] basadas en Spring que puede "simplemente ejecutar". [101] Está preconfigurado con la "vista opinada" del equipo Spring [102] [103] de la mejor configuración y uso de la plataforma Spring y bibliotecas de terceros para que pueda comenzar con el mínimo esfuerzo. La mayoría de las aplicaciones Spring Boot necesitan muy poca configuración de Spring. [104]
Características clave:
Spring Roo es un proyecto comunitario que proporciona un enfoque alternativo basado en la generación de código para utilizar la convención sobre la configuración para crear rápidamente aplicaciones en Java . Actualmente es compatible con Spring Framework, Spring Security y Spring Web Flow . Roo se diferencia de otros marcos de desarrollo rápido de aplicaciones al centrarse en:
Spring Batch es un marco para el procesamiento por lotes que proporciona funciones reutilizables que son esenciales para procesar grandes volúmenes de registros, que incluyen:
Proporciona funciones y servicios técnicos más avanzados que permiten trabajos por lotes de volumen extremadamente alto [112] y alto rendimiento [111] a través de técnicas de optimización y partición [111] .
Spring Batch ejecuta una serie de trabajos; un trabajo consta de muchos pasos y cada paso consta de una tarea de "LECTURA-PROCESO-ESCRITURA" o una tarea de operación única (tasklet). Una tarea de operación "única" también se conoce como tasklet. [113] Significa realizar una sola tarea, como limpiar los recursos antes o después de que se inicie o complete un paso.
El proceso "LEER-PROCESAR-ESCRIBIR" consta de estos pasos: "leer" datos de un recurso ( valores separados por comas (CSV), XML o base de datos), "procesarlos" y luego "escribirlos" en otros recursos ( CSV, XML o base de datos). Por ejemplo, un paso puede leer datos de un archivo CSV, [113] procesarlos y escribirlos en la base de datos. Spring Batch proporciona muchas clases para leer/escribir CSV, XML y bases de datos. [114]
Los pasos se pueden encadenar para ejecutarlos como un trabajo. [113]
Spring Integration es un marco para la integración de aplicaciones empresariales que proporciona funciones reutilizables esenciales para arquitecturas basadas en eventos o mensajería .
@ServiceActivator
para declarar el componente que requiere esta funcionalidad. [120]SimpleMessagingGateway
proporciona soporte esencial para puertas de enlace. SimpleMessagingGateway
permite que la aplicación Spring especifique el canal que envía solicitudes y el canal que espera recibir respuestas. El objetivo principal SimpleMessagingGateway
es ocuparse de las cargas útiles, lo que evita al cliente los detalles intrincados de los mensajes transmitidos y recibidos. SimpleMessagingGateway
se utiliza junto con canales para permitir la integración con sistemas de archivos, JMS, correo electrónico o cualquier otro sistema que requiera cargas útiles y canales. [121]@Splitter
anotación para declarar el componente que requiere esta funcionalidad. [122]@Aggregator
anotación para declarar el componente que requiere esta funcionalidad. [122]Spring Integration admite arquitecturas basadas en tuberías y filtros.
Una regla esencial para tratar con eficacia los flujos de datos es no bloquear nunca. [123] WebSocket es una solución viable a este problema. [123] El protocolo WebSocket es un protocolo de transporte de bajo nivel que permite canales de comunicación full-duplex a través de una conexión TCP . WebSocket actúa como una alternativa a HTTP para permitir la comunicación bidireccional entre el cliente y el servidor. WebSocket es especialmente útil para aplicaciones que requieren intercambios frecuentes y rápidos de pequeños fragmentos de datos, a alta velocidad y volumen. [123]
Spring admite el protocolo WebSocket al proporcionar la API WebSocket para la aplicación reactiva. La @EnableWebSocket
anotación proporciona la funcionalidad de procesamiento de solicitudes de Websocket cuando se coloca en una clase de configuración de Spring. Una interfaz obligatoria es la WebSocketConfigurer
que otorga acceso al archivo WebSocketConfigurer
. Luego, la URL de Websocket se asigna a los controladores relevantes implementando el método RegisterWebSocketHandlers(WebSocketHandlerRegistry). [124]
Spring WebFlux es un marco que sigue el paradigma de programación funcional, diseñado para crear aplicaciones Spring reactivas. Este marco utiliza ampliamente programación funcional y Reactive Streams. Un buen caso de uso para Spring WebFlux es para aplicaciones que requieren enviar y recibir información instantánea, como una aplicación web con capacidades de chat. [125]
Aunque las aplicaciones que utilizan la tecnología Spring WebFlux suelen ser menos legibles que sus homólogas MVC, son más resistentes y más sencillas de ampliar. [126] Spring WebFlux reduce la necesidad de lidiar con las complicaciones asociadas con la sincronización del acceso a subprocesos. [126]
Spring WebFlux admite eventos enviados por el servidor (SSE), que es una tecnología de inserción de servidor que permite al cliente obtener actualizaciones automáticas de un servidor a través de una conexión HTTP. Esta comunicación es unidireccional y comparte muchas similitudes con el modelo de publicación/suscripción que se encuentra en JMS. [123]
El contenedor se puede convertir en un contenedor EJB (Enterprise JavaBeans) 3.0 parcialmente compatible mediante el proyecto Pitchfork. [ cita necesaria ] Algunos [ ¿quién? ] critican el Spring Framework por no cumplir con los estándares. [127] [ verificación fallida ] Sin embargo, SpringSource no considera el cumplimiento de EJB 3 como un objetivo principal y afirma que Spring Framework y el contenedor permiten modelos de programación más potentes. [128] [ verificación fallida ]
En abril de 2022 se publicó una vulnerabilidad de ejecución remota de código que afecta a determinadas versiones de Spring Framework bajo CVE - 2022-22965. Se le dio el nombre Spring4Shell en referencia a la reciente vulnerabilidad Log4Shell , ambas con pruebas de concepto similares en las que los atacantes podían, en máquinas vulnerables, obtener acceso al shell [129] o incluso control total. [130]