Spring Framework es un marco de aplicaciones y un contenedor de inversión de control para la plataforma Java . [ 2 ] Las características principales del marco pueden ser utilizadas por cualquier aplicación Java, pero existen extensiones para construir aplicaciones web sobre la plataforma Jakarta EE . El marco no impone ningún modelo de programación específico . [ 3 ] El marco se ha popularizado en la comunidad Java como un complemento al modelo Enterprise JavaBeans (EJB). [ 4 ] Spring Framework es software libre y de código abierto . [ 5 ] : 121–122 [ 6 ]
Historial de versiones
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 versión de producción, 1.0, se lanzó en marzo de 2004. [ 7 ] El marco Spring 1.2.6 ganó un premio de productividad Jolt y un premio JAX Innovation Award en 2006. [ 8 ] [ 9 ] Spring 2.0 se lanzó en octubre de 2006, Spring 2.5 en noviembre de 2007, Spring 3.0 en diciembre de 2009, Spring 3.1 en diciembre de 2011 y Spring 3.2.5 en noviembre de 2013. [ 10 ] Spring Framework 4.0 se lanzó en diciembre de 2013. [ 11 ] Las mejoras notables en Spring 4.0 incluyeron soporte para Java SE (Standard Edition) 8, Groovy 2, [ 12 ] [ 13 ] algunos aspectos de Java EE 7 y WebSocket . [ 14 ]
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. [ 15 ] Es "compatible con Java 6, 7 y 8, con un enfoque en refinamientos centrales y capacidades web modernas" . [ 16 ]
Spring Framework 4.3 se lanzó el 10 de junio de 2016 y tuvo soporte hasta 2020. [ 17 ] Se anunció que "sería la generación final dentro de los requisitos generales del sistema Spring 4 (Java 6+, Servlet 2.5+), [...]" . [ 16 ]
Spring 5 se construyó sobre Reactor Core compatible con Reactive Streams . [ 18 ]
Spring Framework 6.0 se lanzó el 16 de noviembre de 2022 y llegó con una base Java 17+ y un cambio a Jakarta EE 9+ (en el espacio de nombres), con un enfoque en las APIjakarta de Jakarta EE 10 lanzadas recientemente, como Servlet 6.0 y JPA 3.1. [ 19 ]
Módulos
El framework Spring incluye varios módulos que proporcionan una gama de servicios:
- Spring Core Container: este es el módulo base de Spring [ 20 ] y proporciona contenedores de Spring (
BeanFactoryyApplicationContext). [ 21 ] [ 22 ] [ 23 ] En este contexto,spring-corees el artefacto [ 24 ] que se encuentra en el módulo principal [ 25 ] perteneciente alorg.springframeworkgrupo. [ 26 ] Elspring-coreartefacto consta del contenedor IoC, así como de las clases de utilidad [ 24 ] utilizadas en toda la aplicación. [ 27 ] - Programación orientada a aspectos : permite implementar preocupaciones transversales . [ 28 ] [ 29 ] Es
spring-aopun artefacto del marco AOP. [ 25 ] - Autenticación y autorización : procesos de seguridad configurables que admiten una variedad de estándares, protocolos, herramientas y prácticas a través del subproyecto Spring Security (anteriormente Acegi Security System for Spring). [ 30 ] [ 31 ]
- Convención sobre configuración : el módulo Spring Roo ofrece una solución de desarrollo rápido de aplicaciones para aplicaciones empresariales basadas en Spring .
- Acceso a datos : trabajar con sistemas de gestión de bases de datos relacionales en la plataforma Java usando Java Database Connectivity (JDBC) [ 32 ] y herramientas de mapeo objeto-relacional y con bases de datos NoSQL [ 33 ] . Es
spring-jdbcun artefacto que se encuentra en el módulo JDBC que admite el acceso JDBC al incluir clases de configuración de la fuente de datos. [ 25 ] - Contenedor de inversión de control : configuración de componentes de la aplicación y gestión del ciclo de vida de objetos Java, realizada principalmente mediante inyección de dependencias . [ 22 ]
- Mensajería: registro declarativo de objetos oyentes de mensajes para el consumo transparente de mensajes desde colas de mensajes a través de Java Message Service (JMS), mejora del envío de mensajes sobre las API estándar de JMS. [ 34 ]
- Modelo-vista-controlador : un marco basado en HTTP y servlets que proporciona puntos de extensión y personalización para aplicaciones web y servicios web RESTful (transferencia de estado representacional). [ 35 ] [ 36 ]
- Marco de acceso remoto: serialización declarativa de objetos Java al estilo de llamada a procedimiento remoto (RPC) [ 37 ] sobre redes que admiten la invocación remota de métodos Java (RMI), [ 38 ] CORBA (Arquitectura común de agente de solicitud de objetos) y protocolos basados en HTTP , incluidos servicios web como SOAP (Protocolo simple de acceso a objetos) . [ 39 ] [ 40 ]
- Gestión de transacciones : unifica varias API de gestión de transacciones y coordina las transacciones para objetos Java. [ 41 ] [ 42 ]
- Gestión remota: exposición y gestión declarativa de objetos Java para configuración local o remota a través de Java Management Extensions (JMX). [ 41 ] [ 43 ]
- Pruebas : clases de soporte para escribir pruebas unitarias [ 44 ] y pruebas de integración . [ 45 ]
- Compatibilidad con WebFlux: compatibilidad para usar entornos de ejecución reactivos o servidores web como UnderTow y Netty . [ 25 ] [ 46 ]
- Compatibilidad con Web Socket: Compatibilidad con la comunicación mediante el protocolo WebSocket. El artefacto para este módulo es
spring-websocket. - Soporte XML: soporte para mapeo de objetos a XML. [ 25 ] Se admiten bibliotecas como Jakarta XML Binding (JAXB) y XStream . [ 25 ] El artefacto para este módulo es
spring-oxm.
Los módulos de Spring se empaquetan como archivos JAR. [ 47 ] Se puede acceder a estos artefactos a través del Repositorio Central de Maven usando Maven [ 48 ] o Gradle . [ 49 ]
Contenedor de inversión de control
El contenedor de inversión de control (IoC) es el contenedor central en Spring Framework. [ 2 ] Proporciona un medio consistente para configurar y administrar objetos Java [ 2 ] [ 5 ] : 127–131 usando reflexión . [ 50 ] El contenedor es responsable de administrar los ciclos de vida de objetos específicos: [ 5 ] : 128 creando estos objetos, [ 51 ] llamando a sus métodos de inicialización , [ 50 ] y configurando estos objetos conectándolos entre sí. [ 52 ]
En muchos casos, no es necesario usar el contenedor al utilizar otras partes del Spring Framework, aunque su uso probablemente facilitará la configuración y personalización de la aplicación. El contenedor de Spring proporciona un mecanismo consistente para configurar aplicaciones [ 5 ] : 122 y se integra con casi todos los entornos Java, desde aplicaciones de pequeña escala hasta grandes aplicaciones empresariales.
El programador no crea directamente un objeto, sino que describe cómo debe crearse definiéndolo en el archivo de configuración de Spring. Del mismo modo, los servicios y componentes no se invocan directamente; en su lugar, un archivo de configuración de Spring define qué servicios y componentes deben invocarse. Este modelo IoC (Inversión de Control) tiene como objetivo facilitar el mantenimiento y las pruebas.
Creación y gestión de beans
Los objetos creados por el contenedor se denominan objetos gestionados o beans . [ 53 ] El contenedor se puede configurar cargando archivos XML (Lenguaje de Marcado Extensible) [ 51 ] [ 5 ] : 151–152 o detectando anotaciones Java específicas en las clases de configuración. Estas fuentes de datos contienen las definiciones de beans que proporcionan la información necesaria para crear los beans.
La @Configurationanotación `@Configuration` es específica de Spring y marca una clase como la clase de configuración. Esta clase proporciona los beans a Spring ApplicationContext. [ 54 ] Cada uno de los métodos de la clase de configuración de Spring se configura con la @Beananotación. La ApplicationContextinterfaz devolverá los objetos configurados con la @Beananotación como beans. La ventaja de la configuración basada en Java sobre la configuración basada en XML radica en una mayor seguridad de tipos y una mejor refactorización. [ 54 ]
Tipos de inversión de control
Existen varios tipos de Inversión de Control. La inyección de dependencias y la búsqueda de dependencias son ejemplos de Inversión de Control. [ 55 ] Los objetos se pueden obtener mediante búsqueda de dependencias o inyección de dependencias. [ 5 ] : 127 [ 56 ]
Inyección de dependencias
La inyección de dependencias es un patrón donde el contenedor pasa objetos [ 5 ] : 128 por nombre a otros objetos, ya sea a través de constructores , [ 5 ] : 128 propiedades o métodos de fábrica . Hay varias formas de implementar la inyección de dependencias: inyección de dependencias basada en constructores, inyección de dependencias basada en setters e inyección de dependencias basada en campos. [ 57 ]
Búsqueda de dependencias
La búsqueda de dependencias es un patrón en el que un llamador solicita al objeto contenedor un objeto con un nombre específico o de un tipo específico.
Cableado de automóviles
El framework Spring tiene una característica conocida como autowiring, que utiliza el contenedor Spring para satisfacer automáticamente las dependencias especificadas en las propiedades JavaBean a objetos del tipo apropiado en la fábrica actual. [ 58 ] Esto solo puede ocurrir si hay un único objeto con el tipo apropiado. [ 58 ]
Hay varias anotaciones que se pueden usar para el autowire de POJO, incluyendo la anotación específica de Spring @Autowire(así como otras anotaciones específicas de Spring que ayudan a resolver la ambigüedad del autowire, como las anotaciones @Qualifiero ), [ 59 ] [ 60 ] y las anotaciones estándar de Java y . [ 61 ]@Primary@Resource@Inject
La @Qualifieranotación se puede usar en una clase que define un bean para informar a Spring que priorice la creación del bean cuando lo inyecte automáticamente por nombre . [ 60 ]
La @Primaryanotación se puede usar en una clase que define un bean para informar a Spring que priorice la creación del bean cuando lo autoconfigura por tipo . [ 60 ]
La @Resourceanotación es una anotación que se ajusta a JSR 250 , o Anotaciones Comunes para la Plataforma Java, y se utiliza para la inyección automática de referencias a POJO por nombre . [ 61 ]
La @Injectanotación es una anotación que se ajusta a JSR 300, o Anotaciones estándar para inyección, y se utiliza para la autoconfiguración de referencias a POJO por tipo . [ 61 ]
Marco de programación orientado a aspectos
El Spring Framework cuenta con su propio marco de programación orientada a aspectos (AOP) que modulariza las preocupaciones transversales en aspectos . [ 62 ] La motivación para crear un marco AOP independiente es proporcionar características básicas de AOP sin demasiada complejidad en el diseño, la implementación o la configuración. El marco Spring AOP aprovecha al máximo el contenedor Spring.
El framework Spring AOP se basa en el patrón proxy . [ 63 ] [ 25 ] Se configura en tiempo de ejecución . Esto elimina la necesidad de un paso de compilación o tejido en tiempo de carga. Por otro lado, la intercepción solo permite la ejecución de métodos públicos en objetos existentes en un punto de unión .
En comparación con el framework AspectJ , Spring AOP es menos potente, pero también menos complejo. Spring 1.2 incluye soporte para configurar aspectos de AspectJ en el contenedor. Spring 2.0 añadió más integración con AspectJ; por ejemplo, el lenguaje pointcut se reutiliza y se puede combinar con aspectos basados en Spring AOP. Además, Spring 2.0 añadió una biblioteca Spring Aspects que utiliza AspectJ para ofrecer características comunes de Spring, como la gestión declarativa de transacciones [ 63 ] y la inyección de dependencias mediante el tejido en tiempo de compilación o de carga de AspectJ. [ 64 ] 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.
Spring AOP fue diseñado para trabajar con preocupaciones transversales dentro del Spring Framework. [ 5 ] : 473 Cualquier objeto que sea creado y configurado por el contenedor puede enriquecerse utilizando Spring AOP.
Desde la versión 2.0 del framework, Spring ofrece dos enfoques para la configuración de AOP:
<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 , punto de corte, introducción, objeto objetivo ( objeto aconsejado ), proxy AOP y tejido tienen el mismo significado que en la mayoría de los demás marcos de trabajo AOP (en particular, AspectJ).
marco de acceso a datos
El marco de acceso a datos de Spring aborda las dificultades comunes que enfrentan los desarrolladores al trabajar con bases de datos en aplicaciones. Se brinda soporte para todos los marcos de acceso a datos populares en Java: JDBC, iBatis / MyBatis , [ 33 ] Hibernate , [ 33 ] Java Data Objects (JDO, descontinuado desde 5.x), [ 33 ] Jakarta Persistence API (JPA), [ 33 ] Oracle TopLink , Apache OJB y Apache Cayenne , entre otros.
Para todos estos frameworks compatibles, Spring proporciona estas características.
- Gestión de recursos: adquisición y liberación automática de recursos de base de datos.
- Manejo de excepciones: traducción de excepciones relacionadas con el acceso a datos a una jerarquía de acceso a datos de Spring [ 67 ]
- Participación en transacciones: participación transparente en transacciones en curso [ 5 ] : 290–291
- Desempaquetado de recursos: recuperación de objetos de base de datos desde contenedores de grupo de conexiones
- Abstracción para el manejo de objetos binarios grandes (BLOB) y objetos de caracteres grandes (CLOB).
Todas estas características están disponibles al usar las clases de plantilla proporcionadas por Spring para cada framework compatible. [ 68 ] Los críticos han dicho que estas clases de plantilla son intrusivas y no ofrecen ninguna ventaja sobre el uso directo de (por ejemplo) la API de Hibernate. [ 69 ] En respuesta, los desarrolladores de Spring han hecho posible el uso directo de las API de Hibernate y JPA. 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, [ 70 ] y no admite la traducción de excepciones. [ 71 ]
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. El Spring Framework no ofrece una API de acceso a datos común; en cambio, conserva toda la potencia de las API compatibles. El Spring Framework es el único marco disponible en Java que ofrece entornos de acceso a datos gestionados fuera de un servidor de aplicaciones o contenedor. [ 72 ]
Al utilizar Spring para la gestión de transacciones con Hibernate, es posible que sea necesario configurar los siguientes beans:
- Un
Datasourcecomocom.mchange.v2.c3p0.ComboPooledDataSourceoorg.apache.commons.dbcp.BasicDataSource[ 33 ] - Un
SessionFactorylikeorg.springframework.orm.hibernate3.LocalSessionFactoryBeancon unDataSourceatributo [ 73 ] [ 5 ] : 173 - A
HibernateProperties[ 5 ] : 173 me gustaorg.springframework.beans.factory.config.PropertiesFactoryBean - Un
TransactionManagerme gustaorg.springframework.orm.hibernate3.HibernateTransactionManagercon unSessionFactoryatributo [ 73 ]
Otros puntos de configuración incluyen:
- Una configuración AOP de puntos de corte.
- Semántica transaccional del asesoramiento AOP .
Gestión de transacciones
El marco de gestión de transacciones de Spring aporta un mecanismo de abstracción a la plataforma Java. [ 74 ] Su abstracción es capaz de:
- trabajar con transacciones locales y globales [ 5 ] : 258 (una transacción local no requiere un servidor de aplicaciones )
- trabajar con transacciones anidadas [ 75 ]
- trabajar con puntos de guardado [ 75 ]
- Funciona en casi todos los entornos de la plataforma Java.
En comparación, la API de transacciones de Java (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).
El Spring Framework incluye PlatformTransactionManager[ 76 ] para varias estrategias de gestión de transacciones:
- Transacciones gestionadas en una conexión JDBC [ 74 ]
- Transacciones gestionadas en unidades de trabajo de mapeo objeto-relacional [ 74 ]
- Transacciones gestionadas a través de JTA [ 74 ]
JtaTransactionManager[ 77 ] [ 5 ] : 255–257 yUserTransaction[ 5 ] : 234 - Transacciones gestionadas en otros recursos, como bases de datos de objetos.
Además de este mecanismo de abstracción, el marco proporciona dos maneras de agregar gestión de transacciones a las aplicaciones:
- De forma procedimental, utilizando Spring
TransactionTemplate[ 78 ] - De forma declarativa, mediante el uso de metadatos como XML o anotaciones Java (
@Transactional, [ 63 ] 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 necesidad de depender de JTA o EJB . El marco transaccional también se integra con motores de mensajería [ 79 ] y almacenamiento en caché [ 80 ] .
Marco de trabajo Modelo-Vista-Controlador

El Spring Framework cuenta con su propio marco de aplicación web modelo-vista-controlador (MVC) , [ 36 ] que no estaba previsto inicialmente. Los desarrolladores de Spring decidieron crear su propio marco web como reacción a lo que consideraban un diseño deficiente del (entonces) popular marco web Jakarta Struts , [ 81 ] así como a deficiencias en otros marcos disponibles. En particular, sentían que había una separación insuficiente entre las capas de presentación y de gestión de solicitudes, y entre la capa de gestión de solicitudes y el modelo. [ 82 ]
Al igual que Struts, Spring MVC es un framework basado en solicitudes. [ 5 ] : 375 El framework define interfaces de estrategia [ 5 ] : 144 para todas las responsabilidades que debe manejar un framework moderno basado en solicitudes. El objetivo de cada interfaz es ser simple y clara para que a los usuarios de Spring MVC les resulte fácil escribir sus propias implementaciones, si así lo desean. MVC allana el camino para un código front-end más limpio. Todas las interfaces están estrechamente acopladas a la API de Servlet . Este acoplamiento estrecho a la API de Servlet es visto por algunos como un fallo por parte de los desarrolladores de Spring al no ofrecer un alto nivel de abstracción para aplicaciones basadas en web. Sin embargo, este acoplamiento garantiza que las características de la API de Servlet permanezcan disponibles para los desarrolladores al tiempo que ofrece un framework de alta abstracción para facilitar el trabajo con ella.
La DispatcherServletclase es el controlador frontal [ 83 ] del marco y es responsable de delegar el control a las diversas interfaces durante las fases de ejecución de una solicitud HTTP . [ 84 ]
Las interfaces más importantes definidas por Spring MVC, y sus responsabilidades, se enumeran a continuación: [ 85 ]
Controller: se interpone entreModelyViewpara gestionar las solicitudes entrantes y redirigirlas a la respuesta adecuada. [ 86 ]Controllerasignará la solicitud http a los métodos correspondientes. [ 87 ] Actúa como una puerta que dirige la información entrante. Cambia entre entrarModeloView.HandlerAdapter: responsable de la ejecución de objetos que manejan las solicitudes entrantes. [ 88 ]HandlerInterceptor: responsable de interceptar las solicitudes entrantes. [ 88 ] Comparable, pero no igual a los filtros de Servlet [ 5 ] : 509 (su uso es opcional [ 5 ] : 511 y no está controlado porDispatcherServlet).HandlerMapping: responsable de seleccionar objetos que manejan las solicitudes entrantes (manejadores) en función de cualquier atributo o condición interna o externa a esas solicitudes [ 84 ]LocaleResolver: responsable de resolver y opcionalmente guardar la configuración regional de un usuario individual. [ 89 ]MultipartResolver: facilita el trabajo con cargas de archivos encapsulando las solicitudes entrantes. [ 90 ]View: responsable de devolver una respuesta al cliente.ViewNo debe contener ninguna lógica de negocio y solo debe presentar los datos encapsulados porModel. [ 36 ] Algunas solicitudes pueden ir directamente aViewsin pasar por laModelparte; otras pueden pasar por las tres.ViewResolver: responsable de seleccionar unViewbasado en un nombre lógico para elView[ 91 ] [ 92 ] (su uso no es estrictamente necesario [ 5 ] : 511 ).Model: responsable de encapsular los datos comerciales. [ 91 ] ElModelcontrolador lo expone a la vista. [ 5 ] : 374 (su uso no es estrictamente necesario).
Cada interfaz de estrategia anterior tiene una responsabilidad importante en el marco general. Las abstracciones que ofrecen estas interfaces son potentes, por lo que permiten un conjunto de variaciones en sus implementaciones. [ 5 ] : 144 Spring MVC incluye implementaciones de todas estas interfaces y ofrece un conjunto de características sobre la API de Servlet. Sin embargo, los desarrolladores y proveedores son libres de escribir otras implementaciones. Spring MVC utiliza la java.util.Mapinterfaz Java como una abstracción orientada a datos para Modeldonde se espera que las claves sean Stringvalores.
La facilidad para probar las implementaciones de estas interfaces es una ventaja importante del alto nivel de abstracción que ofrece Spring MVC. [ 93 ] [ 5 ] : 324DispatcherServlet está estrechamente acoplado al contenedor de inversión de control de Spring para configurar las capas web de las aplicaciones. Sin embargo, las aplicaciones web pueden usar otras partes del Spring Framework, incluido el contenedor, y optar por no usar Spring MVC.
Un flujo de trabajo de 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. DispatcherServletes un controlador frontal en Spring MVC. [ 84 ] [ 94 ] El DispatcherServletes altamente personalizable y flexible. [ 94 ] Específicamente, es capaz de manejar más tipos de manejadores que cualquier implementación de org. springframework.web.servlet.mvc.Controllero org. springframework.stereotype.Controllerclases anotadas. [ 94 ] Consulta uno o más mapeos de manejadores. [ 84 ]DispatcherServlet elige un controlador apropiado y reenvía la solicitud a él. El Controllerprocesa la solicitud particular y genera un resultado. Se conoce como Model. Esta información debe formatearse en HTML o cualquier tecnología de front-end como Jakarta Server Pages (también conocido como JSP) [ 84 ] [ 95 ] o Thymeleaf . [ 95 ] Este es el Viewde una aplicación. [ 84 ] Toda la información está en el objeto Modely View. Cuando el controlador no está acoplado a una vista particular, DispatcherServletencuentra el real View(como JSP) con la ayuda de ViewResolver. [ 84 ] [ 5 ] : 390–391
Configuración de DispatcherServlet
A partir de la versión 3.0 de la especificación de Servlet, existen varias formas de configurar el DispatcherServlet: [ 96 ]
- Configurándolo
web.xmlcomo se muestra a continuación: [ 96 ]
<servlet> <servlet-name> MyServlet </servlet-name> <servlet-class> org.springframework.web.servlet.DispatcherServlet </servlet-class> </servlet><servlet-mapping> <servlet-name> MyServlet </servlet-name> <url-pattern> / <url-pattern> </servlet-mapping>- Al configurarlo en
web-fragment.xml. [ 96 ] - Al usar
javax.servlet.ServletContainerInitializer. [ 96 ] - Mediante la implementación de la
org.springframework.web.WebApplicationInitializerinterfaz. [ 96 ] - Mediante el uso de la autoconfiguración integrada para Spring Boot, que utiliza la
SpringBootServletInitializerclase. [ 96 ]
Marco de acceso remoto
El framework de acceso remoto de Spring es una abstracción para trabajar con diversas tecnologías basadas en RPC ( llamada a procedimiento remoto ) disponibles en la plataforma Java, tanto para la conectividad del cliente como para la serialización de objetos en servidores. [ 97 ] La característica más importante que ofrece este framework es facilitar al máximo la configuración y el uso de estas tecnologías mediante la combinación de inversión de control y AOP.
El marco proporciona recuperación ante fallos (reconexión automática tras un fallo de conexión) y algunas optimizaciones para el uso del lado del cliente de los beans de sesión sin estado remotos de EJB .
Spring ofrece soporte para estos protocolos y productos de forma predeterminada.
- Protocolos basados en HTTP
- Hessian : protocolo de serialización binaria, [ 98 ] [ 5 ] : 335 de código abierto [ 5 ] : 335 y mantenido por protocolos basados en CORBA . Hessian es mantenido por la empresa Caucho . [ 5 ] : 335 Hessian es adecuado para necesidades de comunicación remota sin estado, en particular, comunicación de Java a Java. [ 5 ] : 335–336
- Burlap: Un protocolo binario basado en XML de código abierto y mantenido por la empresa Caucho . [ 98 ] [ 5 ] : 335 La única ventaja de usar Burlap en lugar de Hessian es que es analizable mediante XML y legible para humanos . [ 5 ] : 335 Para la comunicación Java a Java, se prefiere Hessian ya que es más ligero y eficiente. [ 5 ] : 335
- RMI (1): invocaciones de métodos que utilizan la infraestructura RMI, pero específicas de Spring [ 97 ]
- RMI (2): invocaciones de métodos que utilizan interfaces RMI que cumplen con el uso regular de RMI [ 97 ]
- RMI-IIOP ( CORBA ): invocaciones de métodos mediante RMI-IIOP/CORBA
- Integración del cliente Enterprise JavaBean [ 99 ]
- Conectividad local de beans de sesión sin estado EJB: conexión a beans de sesión sin estado locales
- Conectividad remota de beans de sesión sin estado EJB: conexión a beans de sesión sin estado remotos
- JABÓN
- Integración con el marco de servicios web Apache Axis [ 100 ]
Apache CXF proporciona integración con Spring Framework para la exportación de objetos al estilo RPC en el lado del servidor. [ 100 ]
La configuración tanto del cliente como del servidor para todos los protocolos y productos de estilo RPC compatibles con el marco de acceso remoto Spring (excepto la compatibilidad con Apache Axis) se configura en el contenedor Spring Core.
Existe una implementación alternativa de código abierto (Cluster4Spring) de un subsistema de acceso remoto incluido en el Spring Framework, que está diseñado para admitir varios esquemas de acceso remoto (uno a uno, uno a muchos, descubrimiento dinámico de servicios).
Desarrollo rápido de aplicaciones basado en la convención sobre la configuración
Bota de primavera
Spring Boot Extension es la solución de Spring basada en la convención sobre la configuración para crear aplicaciones independientes y de nivel de producción [ 101 ] basadas en Spring que puedes "simplemente ejecutar". [ 102 ] Está preconfigurada con la "visión particular" del equipo de Spring [ 103 ] [ 104 ] sobre la mejor configuración y uso de la plataforma Spring y las bibliotecas de terceros para que puedas empezar con la mínima complicación. La mayoría de las aplicaciones Spring Boot necesitan poca configuración de Spring. [ 105 ]
Características principales:
- Cree aplicaciones Spring independientes
- Integre Tomcat o Jetty [ 106 ] directamente (no es necesario desplegar archivos WAR )
- Proporcione modelos de objetos de proyecto (POM) de inicio con opiniones definidas para simplificar su configuración de Maven / Gradle [ 107 ].
- Configurar Spring automáticamente siempre que sea posible [ 108 ]
- Proporcionar características listas para producción [ 101 ] como métricas , [ 109 ] comprobaciones de estado [ 109 ] y configuración externalizada [ 110 ].
- Absolutamente ninguna generación de código [ 106 ] y ningún requisito [ 107 ] para la configuración XML. [ 111 ]
- Integración fluida y compatibilidad con todos los patrones de integración empresarial.
Roo de primavera
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 configuración y así 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:
- Extensibilidad (mediante complementos)
- Productividad de la plataforma Java (en comparación con otros lenguajes)
- Evita el bloqueo (Roo se puede eliminar en pocos minutos de cualquier aplicación).
- Evitar la ejecución en tiempo real (con las ventajas de implementación asociadas)
- Usabilidad (en particular a través de las funciones de la interfaz y los patrones de uso)
Marco de trabajo por lotes
Spring Batch es un marco de trabajo para el procesamiento por lotes que proporciona funciones reutilizables esenciales para procesar grandes volúmenes de registros, entre las que se incluyen:
- registro / seguimiento
- gestión de transacciones
- Estadísticas de procesamiento de trabajos [ 112 ]
- Reinicio del trabajo
Proporciona servicios y características técnicas más avanzadas que permiten trabajos por lotes de muy alto volumen [ 113 ] y alto rendimiento [ 112 ] mediante técnicas de optimización y particionamiento [ 112 ] .
Spring Batch ejecuta una serie de trabajos; un trabajo consta de varios pasos y cada paso consta de una tarea de "LECTURA-PROCESAMIENTO-ESCRITURA" o una tarea de operación única (tasklet). Una tarea de operación "única" también se conoce como tasklet. [ 114 ] Significa realizar una sola tarea, como limpiar los recursos antes o después de que se inicie o finalice un paso.
El proceso "LEER-PROCESAR-ESCRIBIR" consta de los siguientes 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, [ 114 ] procesarlos y escribirlos en la base de datos. Spring Batch proporciona varias clases para leer/escribir CSV, XML y bases de datos. [ 115 ]
Los pasos se pueden encadenar para ejecutarlos como un trabajo. [ 114 ]
Marco de integración
Spring Integration es un framework para la integración de aplicaciones empresariales que proporciona funciones reutilizables esenciales para arquitecturas de mensajería o basadas en eventos .
- enrutadores: enrutan un mensaje a un canal de mensajes en función de las condiciones [ 116 ]
- transformadores: convierte/transforma/cambia la carga útil del mensaje y crea un nuevo mensaje con la carga útil transformada [ 117 ]
- Adaptadores: se integran con otras tecnologías y sistemas (HTTP, AMQP (Protocolo avanzado de cola de mensajes), [ 118 ] JMS (Servicio de mensajería Java), XMPP (Protocolo extensible de mensajería y presencia), SMTP (Protocolo simple de transferencia de correo), [ 119 ] IMAP (Protocolo de acceso a mensajes de Internet), FTP (Protocolo de transferencia de archivos), así como FTPS / SFTP , sistemas de archivos, etc.).
- filtros: filtra un mensaje según ciertos criterios. Si no se cumplen los criterios, el mensaje se descarta. [ 120 ]
- Activadores de servicio: invocan una operación en un objeto de servicio. Spring admite el uso de la anotación
@ServiceActivatorpara declarar el componente que requiere esta funcionalidad. [ 121 ] - gestión y auditoría
- Las pasarelas exponen una interfaz al cliente para los servicios solicitados. Un middleware de mensajería se encarga de aprovisionar esta interfaz. Esta interfaz desacopla el middleware de mensajería del cliente al ocultar las API subyacentes de JMS o Spring Integration. Las pasarelas están relacionadas con el patrón Fachada . La clase Integration de Spring
SimpleMessagingGatewayproporciona soporte esencial para las pasarelas.SimpleMessagingGatewayPermite que la aplicación Spring especifique el canal que envía las solicitudes y el canal que espera recibir las respuestas. El enfoque principal deSimpleMessagingGatewayes gestionar las cargas útiles, lo que evita que el cliente tenga que lidiar con los detalles complejos de los mensajes transmitidos y recibidos.SimpleMessagingGatewaySe utiliza junto con los canales para permitir la integración con sistemas de archivos, JMS, correo electrónico o cualquier otro sistema que requiera cargas útiles y canales. [ 122 ] - Divisor: divide una carga útil grande en cargas útiles más pequeñas para admitir diferentes flujos de procesamiento. El divisor se implementa en Spring mediante el componente divisor. Este componente generalmente reenvía los mensajes a clases con funcionalidad más especializada. Spring admite la
@Splitteranotación para declarar el componente que requiere esta funcionalidad. [ 123 ] - Agregador: se utiliza para combinar varios mensajes en un único resultado. En términos generales, el agregador es lo opuesto al divisor. El agregador publica un único mensaje para todos los componentes posteriores. Spring admite la
@Aggregatoranotación para declarar el componente que requiere esta funcionalidad. [ 123 ]
Spring Integration admite arquitecturas basadas en tuberías y filtros.
Spring WebSocket
Una regla esencial para manejar flujos de datos de manera efectiva es no bloquearlos nunca. [ 124 ] El WebSocket es una solución viable a este problema. [ 124 ] El protocolo WebSocket es un protocolo de transporte de bajo nivel que permite canales de comunicación dúplex completo a través de una conexión TCP . El WebSocket actúa como una alternativa a HTTP para habilitar la comunicación bidireccional entre el cliente y el servidor. El WebSocket es especialmente útil para aplicaciones que requieren intercambios frecuentes y rápidos de pequeños fragmentos de datos, a alta velocidad y volumen. [ 124 ]
Spring admite el protocolo WebSocket proporcionando la API WebSocket para la aplicación reactiva. La @EnableWebSocketanotación otorga funcionalidad de procesamiento de solicitudes WebSocket cuando se coloca en una clase de configuración de Spring. Una interfaz obligatoria es la WebSocketConfigurerque otorga acceso a WebSocketConfigurer. Luego, la URL WebSocket se asigna a los manejadores relevantes implementando el método registerWebSocketHandlers(WebSocketHandlerRegistry). [ 125 ]
Spring WebFlux
Spring WebFlux es un framework que sigue el paradigma de programación funcional, diseñado para construir aplicaciones reactivas de Spring. Este framework utiliza ampliamente la programación funcional y los Reactive Streams. Un buen caso de uso para Spring WebFlux son las aplicaciones que requieren enviar y recibir información instantánea, como una aplicación web con capacidades de chat. [ 126 ]
Aunque las aplicaciones que utilizan la tecnología Spring WebFlux suelen ser menos legibles que sus contrapartes MVC, son más robustas y más sencillas de extender. [ 127 ] Spring WebFlux reduce la necesidad de lidiar con las complicaciones asociadas con la sincronización del acceso a los hilos. [ 127 ]
Spring WebFlux admite eventos enviados por el servidor (SSE), una tecnología de envío de datos que permite al cliente obtener actualizaciones automáticas del servidor a través de una conexión HTTP. Esta comunicación es unidireccional y comparte varias similitudes con el modelo de publicación/suscripción de JMS. [ 124 ]
Relación con Jakarta Enterprise Beans (EJB)
El contenedor puede convertirse en un contenedor EJB (Enterprise JavaBeans) 3.0 parcialmente compatible mediante el proyecto Pitchfork. Algunos critican el Spring Framework por no cumplir con los estándares. [ 128 ] Sin embargo, SpringSource no considera la compatibilidad con EJB 3 como un objetivo principal y afirma que el Spring Framework y el contenedor permiten modelos de programación más potentes. [ 129 ]
Vulnerabilidad de Spring4Shell
En abril de 2022 se publicó una vulnerabilidad de ejecución remota de código que afecta a ciertas versiones de Spring Framework bajo el identificador CVE - 2022-22965 . Se le dio el nombre de Spring4Shell en referencia a la reciente vulnerabilidad Log4Shell , ya que ambas presentaban pruebas de concepto similares en las que los atacantes podían obtener acceso a la consola [ 130 ] o incluso control total en máquinas vulnerables. [ 131 ]
Véase también
Citas
- ↑ https://github.com/spring-projects/spring-framework/releases/tag/v7.0.5 .
{{cite web}}: Falta o está vacío|title=( ayuda ) - 1 2 3 Deinum et al. 2014 , p. 47, §2 Tareas principales de primavera.
- ↑ "Descripción general de Spring Framework" . docs.spring.io .
- ↑ Deinum et al. 2014 , pp. 694–698, §16-2 Integración de dos sistemas mediante JMS.
- ^ Johnson y Hoeller 2004 .
- ↑ Deinum & Cosmina 2021 , p. 1, §1 Establecimiento de un entorno de desarrollo local.
- ↑ "Spring Framework 1.0 Final Released" . Blog oficial de Spring Framework . 24 de marzo de 2014. Consultado el 1 de marzo de 2021 .
- ↑ Ganadores del premio Jolt 2006
- ↑ "Ganador del premio JAX Innovation Award 2006" . Archivado del original el 17 de agosto de 2009. Consultado el 12 de agosto de 2009 .
- ↑ "Spring Framework 3.2.5 lanzado" . Sitio web oficial de Spring . 7 de noviembre de 2013. Consultado el 16 de octubre de 2016 .
- ↑ "Anuncio del lanzamiento general de Spring Framework 4.0" . Blog de Spring. 12 de diciembre de 2013.
- ↑ Walls 2016 , págs. 92–106, §5.
- ↑ Cosmina et al. 2017 , pp. 125–126, §4 Configuración de Spring en detalle y Spring Boot.
- ^ Cosmina et al. 2017 , págs. 1–18, §1 Presentación de la primavera.
- ↑ "Spring Framework 4.2 ya está disponible" . Blog de Spring. 31 de julio de 2015.
- 1 2 "Spring Framework 4.2 ya está disponible" . Blog de Spring.
- ↑ "Versiones de Spring Framework: Versiones compatibles" . github.com .
- ↑ "Reactive Spring" . Blog de Spring. 9 de febrero de 2016.
- ↑ "Spring Framework 6.0 ya está disponible" . Blog de Spring. 16 de noviembre de 2022.
- ↑ Walls 2019 , pág. 48.
- ↑ Documentación de Spring Framework para el contenedor principal
- 1 2 Johnson et al. 2005 , Capítulo §2 - La fábrica de frijoles y el contexto de aplicación.
- ^ Deinum y otros. 2014 , pág. 137, §3-1 Uso de Java Config para configurar POJO.
- 1 2 Johnson & Hoeller 2004 , pág. 150, Introducción al Spring Framework - La fábrica de beans principales.
- 1 2 3 4 5 6 7 Deinum & Cosmina 2021 , pp. 22–25, §2 Fundamentos del Spring Framework - El Spring Framework.
- ↑ Walls 2016 , pág. 240, §Apéndice D Dependencias de Spring Boot.
- ↑ Johnson et al. 2005 , Capítulo §1 Introducción al marco Spring - Resumen del módulo.
- ↑ Johnson et al. 2005 , Capítulo §4 - Primavera y AOP.
- ^ Deinum y otros. 2014 , págs. 196–198, §3-17 Introducciones de AOP para POJO.
- ↑ Johnson et al. 2005 , Sistema de seguridad Acegi para Spring.
- ^ Deinum y otros. 2014 , pág. 331, §7 Seguridad de primavera.
- ↑ Walls 2019 , págs. 56–59.
- 1 2 3 4 5 6 Deinum et al. 2014 , págs. 419–426, §10 Acceso a datos.
- ↑ Deinum et al. 2014 , pp. 677–681, §15-4 Crear POJO controlados por mensajes en Spring.
- ↑ Johnson et al. 2005 , Capítulo §12 - Marco MVC web.
- ^ Deinum et al . 2014 , pág. 217, §4 Primavera @MVC.
- ↑ Deinum et al. 2014 , págs. 525–534, §12-3 Escritura de un ItemWriter y ItemReader personalizados.
- ↑ Deinum et al. 2014 , págs. 627–632, §14-7 Exponer e invocar servicios a través de RMI; §14-8 Exponer e invocar servicios a través de HTTP.
- ↑ Deinum et al. 2014 , pp. 641–658, §14-10 Introducción a los servicios web SOAP basados en contratos, §14-11 Exposición e invocación de servicios web SOAP con Spring-WS, §14-12 Desarrollo de servicios web SOAP con Spring-WS y XML Marshalling.
- ↑ Johnson et al. 2005 , Capítulo §8 - Remoting ligero.
- 1 2 Johnson et al. 2005 , Capítulo §9 - Servicios de apoyo.
- ^ Deinum y otros. 2014 , pág. 475, §11 Gestión de transacciones de primavera.
- ↑ Deinum et al. 2014 , p. 591, §14 Spring Java Enterprise Services and Remoting Technologies.
- ↑ Deinum et al. 2014 , pp. 737–739, §17-3 Pruebas unitarias de controladores Spring MVC.
- ↑ Deinum et al. 2014 , pp. 739–743, §17-4 Gestión de contextos de aplicación en pruebas de integración.
- ↑ Musib 2022 , pág. 358, §8.3 Introducción a Spring WebFlux.
- ^ Cosmina et al. 2017 , pág. 21-23.
- ↑ Cosmina et al. 2017 , pp. 24–25, §2 Acceso a módulos Spring mediante Maven.
- ↑ Cosmina et al. 2017 , p. 26, §2 Acceso a módulos de Spring usando Gradle.
- 1 2 Deinum et al. 2014 , pp. 53–62, §2-2 Crear POJO invocando un constructor.
- 1 2 Deinum et al. 2014 , pp. 48–52, §2-1 Administrar y configurar POJOs con el contenedor Spring IoC.
- ↑ Deinum et al. 2014 , pp. 59–67, §2-3 Utilice referencias POJO, cableado automático e importaciones para interactuar con otros POJO.
- ↑ Deinum et al. 2014 , pp. 112–116, §2-16 Uso de editores de propiedades en Spring.
- 1 2 Walls 2019 , págs. 4–6, §1.1 Cómo empezar con la primavera: ¿Qué es la primavera?
- ^ Cosmina et al. 2017 , pág. 37, §3 Presentación de IoC y DI en primavera.
- ↑ ¿Cuál es la diferencia entre depencylookup e inyección de dependencias? - Foro de Spring . Forum.springsource.org (28/10/2009). Consultado el 24/11/2013.
- ↑ Deinum y Cosmina 2021 , págs. 26–32, §2 Fundamentos del Spring Framework - Inyección de dependencias.
- 1 2 Johnson & Hoeller 2004 , pp. 135–137, §6 Contenedores ligeros e inversión de control - Contenedores IOC.
- ↑ Deinum et al. 2014 , pp. 145–151, §3-3 Usar referencias POJO y cableado automático para interactuar con otros POJO.
- 1 2 3 Cosmina et al. 2017 , pp. 112–120, §3 Introducción a IoC y DI en Spring: Autoconfiguración de sus beans.
- ^ Deinum et al . 2014 , págs. 151–154, §3-4 POJO de cableado automático con las anotaciones @Resource y @Inject.
- ↑ Deinum et al. 2014 , pp. 99–104, §2-12 Programación orientada a aspectos.
- 1 2 3 Deinum et al. 2014 , pp. 492–494, §11-6 Gestión declarativa de transacciones con la anotación @Transactional.
- ↑ Deinum et al. 2014 , pp. 509–510, §11-11 Gestión de transacciones con tejido en tiempo de carga.
- ↑ Configuración XML de Spring AOP
- ↑ Configuración de anotaciones de AspectJ
- ↑ Deinum et al. 2014 , pp. 441–446, §10-5 Manejo de excepciones en el marco JDBC de Spring.
- ^ Deinum y otros. 2014 , págs. 426–441, 463–465.
- ↑ Hibernate VS Spring
- ↑ Deinum et al. 2014 , pp. 463–466, §10-8 Persistencia de objetos con plantillas ORM de Spring.
- ↑ Deinum et al. 2014 , pp. 446–462, §10-6 Problemas con el uso directo de marcos ORM.
- ↑ "Spring Data JPA para la abstracción de consultas" . 6 de febrero de 2018. Consultado el 6 de febrero de 2018 .
- 1 2 Deinum et al. 2014 , pp. 456–460, §10-7 Configuración de fábricas de recursos ORM en Spring.
- 1 2 3 4 Deinum et al. 2014 , pp. 464–468, §11-2 Elección de una implementación de gestor de transacciones.
- 1 2 Deinum et al. 2014 , pp. 494–499, §11-7 Configuración del atributo de transacción de propagación.
- ↑ Deinum et al. 2014 , pp. 482–484, §11-2 Elección de una implementación de gestor de transacciones.
- ↑ Deinum et al. 2014 , pp. 484–486, §11-3 Gestión programática de transacciones con la API del gestor de transacciones.
- ↑ Deinum et al. 2014 , pp. 486–489, §11-4 Gestión programática de transacciones con una plantilla de transacción.
- ↑ Deinum et al. 2014 , pp. 677–685, §15-4 Crear POJO controlados por mensajes en Spring.
- ↑ Deinum et al. 2014 , pp. 685–686, §15-5 Caché y conexiones JMS de grupo.
- ↑ "Introducción al Spring Framework" . Archivado del original el 30 de junio de 2019.
- ↑ Johnson, Expert One-on-One J2EE Design and Development, Cap. 12. et al.
- ↑ Patrones de arquitectura de aplicaciones empresariales: controlador frontal
- 1 2 3 4 5 6 7 Deinum et al. 2014 , pp. 217–232, §4-1 Desarrollo de una aplicación web simple con Spring MVC.
- ↑ Deinum & Cosmina 2021 , pp. 82–83, §4 Arquitectura Spring MVC - Resumen del procesamiento de solicitudes.
- ↑ Deinum et al. 2014 , pp. 217–219, §4-1 Desarrollo de una aplicación web simple con Spring MVC.
- ↑ Walls 2019 , págs. 18–19.
- 1 2 Deinum et al. 2014 , pp. 236–239, §4-3 Intercepción de solicitudes con interceptores de manejador.
- ^ Deinum y otros. 2014 , págs. 239–240, §4-4 Resolución de configuraciones regionales del usuario.
- ↑ Deinum & Cosmina 2021 , pp. 75–76, §4 Arquitectura Spring MVC - Preparar una solicitud.
- 1 2 Deinum et al. 2014 , pp. 243–247, §4-6 Resolución de opiniones por nombres.
- ↑ Deinum & Cosmina 2021 , p. 81, §4 Arquitectura Spring MVC - Renderizar una vista.
- ^ Deinum y otros. 2014 , pág. 723, §17 Pruebas de primavera.
- 1 2 3 Deinum & Cosmina 2021 , pp. 73–74, §4 Arquitectura Spring MVC - Flujo de trabajo de procesamiento de solicitudes de DispatcherServlet.
- 1 2 Walls 2019 , pág. 35.
- 1 2 3 4 5 6 Deinum & Cosmina 2021 , pp. 84–90, §4 Arquitectura Spring MVC - Bootstrapping DispatcherServlet.
- 1 2 3 Deinum et al. 2014 , pp. 627–632, §14-7 Exponer e invocar servicios a través de RMI.
- 1 2 Deinum et al. 2014 , pp. 632–635, §14-8 Exponer e invocar servicios a través de HTTP.
- ↑ Deinum et al. 2014 , pp. 692–694, §16-1 Integración de un sistema con otro mediante EAI.
- 1 2 Deinum et al. 2014 , pp. 635–641, §14-9 Exponer e invocar servicios web SOAP con JAX-WS.
- 1 2 Walls 2016 , pág. vii, §prólogo.
- ↑ "Spring Boot" . spring.io.
- ↑ Walls 2016 , pág. 48, §2.4.
- ^ Deinum & Cosmina 2021 , págs. 21-22, §2 Fundamentos de Spring Framework.
- ↑ Walls 2016 , págs. 37–48, §2.3.
- 1 2 Walls 2016 , pág. 7, §1.1.3.
- 1 2 Muros 2016 , p. x, §Prefacio.
- ↑ Walls 2016 , págs. 4–5, §1.1.2.
- 1 2 Walls 2016 , págs. 124–139, §7.
- ↑ Walls 2016 , págs. 49–69, §3.1-§3.2.3.
- ↑ "Acerca de Spring Boot" . Consultado el 18 de marzo de 2020 .
- ^ Deinum et al . 2014 , págs. 536–541, §12-7 Ejecución del paso de control.
- ↑ Deinum et al. 2014 , pp. 714–717, §16-9 Puesta en escena de eventos mediante Spring Batch.
- 1 2 3 Deinum et al. 2014 , pp. 518–524, §12-2 Lectura y escritura.
- ^ Deinum y otros. 2014 , págs. 511–512, §12 Lote de primavera.
- ↑ Deinum et al. 2014 , pp. 713–714, §16-8 Enrutamiento condicional con enrutadores.
- ↑ Deinum et al. 2014 , pp. 704–707, §16-5 Transformación de un mensaje de un tipo a otro.
- ↑ Deinum et al. 2014 , pp. 686–690, §15-6 Enviar y recibir mensajes AMQP con Spring.
- ↑ Deinum et al. 2014 , pp. 613–620, §14-4 Enviar correo electrónico con el soporte de correo electrónico de Spring.
- ↑ Deinum et al. 2014 , p. 406, §9-2 Uso de Spring en sus servlets y filtros.
- ↑ Deinum et al. 2014 , pp. 695–698, §16-2 Integración de dos sistemas mediante JMS.
- ^ Deinum y otros. 2014 , págs. 717–722, §16-10 Uso de puertas de enlace.
- 1 2 Deinum et al. 2014 , pp. 710–713, §16-7 Control de integración de bifurcación: divisores y agregadores.
- 1 2 3 4 Deinum & Cosmina 2021 , pp. 422–425, §11 El protocolo WebSocket.
- ↑ Deinum & Cosmina 2021 , pp. 425–432, §11 El protocolo WebSocket.
- ↑ Deinum & Cosmina 2021 , pág. 369, §10 Creación de aplicaciones reactivas con Spring WebFlux.
- 1 2 Deinum & Cosmina 2021 , p. 421, §11 Asegurando las aplicaciones Spring WebFlux.
- ↑ Spring VS EJB3
- ↑ "Preguntas frecuentes de Pitchfork" . Consultado el 6 de junio de 2006 .
- ↑ "Spring4Shell: vulnerabilidad crítica en Spring - Blog oficial de Kaspersky" . Abril de 2022.
- ↑ Chirgwin, Richard (4 de abril de 2022). "VMware vulnerable a Spring4shell" . itnews.com.au. Archivado del original el 13 de febrero de 2024. Recuperado el 13 de febrero de 2024 .
Referencias
- Cosmina, Juliana; Harrop, Rob; Schaefer, Chris; Ho, Clarence (2017). Pro Primavera 5 . Berkeley, CA: Apress. doi : 10.1007/978-1-4842-2808-1 . ISBN 978-1-4842-2807-4.
- Deinum, Marta; Cosmina, Juliana (2021). Pro Spring MVC con WebFlux . Berkeley, CA: Apress. doi : 10.1007/978-1-4842-5666-4 . ISBN 978-1-4842-5665-7.
- Deinum, Marten; Long, Josh; Mak, Gary; Rubio, Daniel (2014). Recetas de primavera . Berkeley, CA: Apress. doi : 10.1007/978-1-4302-5909-1 . ISBN 978-1-4302-5908-4.
- Johnson, Rod; Höller, Jürgen; Arendsen, Alef; Risberg, Thomas; Sampaleanu, Colin (8 de julio de 2005). Desarrollo profesional en Java con el framework Spring (Primera edición). Wrox Press . pág. 672. ISBN 0-7645-7483-3.
- Harrop, Rob; Machacek, Jan (31 de enero de 2005). Pro Spring (Primera ed.). Presione . pag. 832.ISBN 1-59059-461-4.
- Johnson, Rod; Jürgen, Höller (23 de octubre de 2002). Desarrollo de J2EE sin EJB (Primera edición). Wrox Press . pág. 768. ISBN 0-7645-5831-5.
- Johnson, Rod; Jurgen, Holler ( octubre de 2002). Expert One-on-one J2EE Design and Development (Primera ed.). Wrox Press . pág. 750. ISBN 0-7645-4385-7.
- Johnson, varilla; Hoeller, Jürgen (2004). Desarrollo experto J2EE uno a uno sin EJB . Indianápolis, Indiana: Wiley. ISBN 978-0-7645-5831-3.
- Musib, Somnath (12 de julio de 2022). Spring Boot in Practice . Simon and Schuster. ISBN 978-1-61729-881-3.
- Pollack, Mark; Gierke, Oliver; Risberg, Thomas; Brisbin, Jon; Hunger, Michael (31 de octubre de 2012). Spring Data (Primera ed.). O'Reilly . pág. 316. ISBN 978-1449323950.
- Sarin, Ashish (27 de junio de 2016). Introducción a Spring Framework (Tercera edición). Publicado por el autor . pág. 626. ISBN 978-1534985087.
- Long, Josh (27 de agosto de 2013). Spring Framework LiveLessons (Primera edición). Addison-Wesley Professional . pp. 4+ horas. ISBN 978-0-13-346307-1.
- Walls, Craig (3 de enero de 2016). Spring Boot en acción . Manning . ISBN 978-1-61729-254-5.
- Walls, Craig (2019). Primavera en acción . Manning . ISBN 978-1-61729-494-5.
- "Ganador del premio JAX Innovation Award 2006" . Archivado del original el 17 de agosto de 2009. Consultado el 12 de agosto de 2009 .
- "Preguntas frecuentes de Pitchfork" . Consultado el 6 de junio de 2006 .
- "Anuncio del lanzamiento general de Spring Framework 4.0" . Blog de Spring. 12 de diciembre de 2013.
- "Disponibilidad general de Spring Framework 7.0" . Blog de Spring. 13 de noviembre de 2025.
Enlaces externos
- Sitio web oficial
- Tutoriales de primavera
- Programación orientada a aspectos
- Bibliotecas de Java (lenguaje de programación)
- Plataforma empresarial Java
- Software que utiliza la licencia Apache.
- marcos de trabajo web