CodeGym /Blog Java /Random-ES /Spring for lazy people Foundation, conceptos básicos y ej...
John Squirrels
Nivel 41
San Francisco

Spring for lazy people Foundation, conceptos básicos y ejemplos con código. Parte 1

Publicado en el grupo Random-ES
Spring for lazy people Foundation, conceptos básicos y ejemplos con código.  Parte 1 - 1En este artículo, no voy a decirle cómo poner en funcionamiento un proyecto de Spring en 5 minutos usando mi código. Solo voy a escribir lo básico, cosas que podrías ignorar y aun así crear un proyecto. Pero en este artículo, todavía no entenderá lo que está pasando y, lo que es más importante, por qué.

¿Qué es Spring Framework?

Spring Framework, o simplemente Spring, es uno de los frameworks más populares para crear aplicaciones web en Java. Un marco es como una biblioteca (quizás esté más familiarizado con este término), pero hay algo que considerar. En términos generales, cuando usa una biblioteca, simplemente crea instancias de las clases que contiene, llama a los métodos que necesita y, por lo tanto, obtiene el resultado que necesita. En otras palabras, este es un enfoque más imperativo: en su programa, indica explícitamente el momento específico en el que necesita crear qué objeto, cuándo llamar a qué método específico, etc. Con los marcos, las cosas son ligeramente diferentes. Simplemente escribe algunas clases propias y escribe algo de lógica en ellas, pero luego el propio marco crea instancias de tus clases y llama a sus métodos. Sus clases generalmente implementan algunas interfaces del marco o heredan algunas de sus clases, lo que le brinda alguna funcionalidad que ya se ha escrito para usted. Pero este no es siempre el caso. Por ejemplo, Spring intenta en la medida de lo posible evitar un acoplamiento tan estrecho (donde sus clases dependen directamente de las clases/interfaces en el marco). Utiliza anotaciones para lograr esto. Volveremos a esto más tarde. Pero es importante comprender que Spring es solo una colección de clases e interfaces que están disponibles para su uso :) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes. que son tan familiares para todos nosotros. E incluso escribiremos uno de ellos hoy. brindándole así alguna funcionalidad que ya ha sido escrita para usted. Pero este no es siempre el caso. Por ejemplo, Spring intenta en la medida de lo posible evitar un acoplamiento tan estrecho (donde sus clases dependen directamente de las clases/interfaces en el marco). Utiliza anotaciones para lograr esto. Volveremos a esto más tarde. Pero es importante comprender que Spring es solo una colección de clases e interfaces que están disponibles para su uso :) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes. que son tan familiares para todos nosotros. E incluso escribiremos uno de ellos hoy. brindándole así alguna funcionalidad que ya ha sido escrita para usted. Pero este no es siempre el caso. Por ejemplo, Spring intenta en la medida de lo posible evitar un acoplamiento tan estrecho (donde sus clases dependen directamente de las clases/interfaces en el marco). Utiliza anotaciones para lograr esto. Volveremos a esto más tarde. Pero es importante comprender que Spring es solo una colección de clases e interfaces que están disponibles para su uso :) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes. que son tan familiares para todos nosotros. E incluso escribiremos uno de ellos hoy. Spring intenta en la medida de lo posible evitar un acoplamiento tan estrecho (donde sus clases dependen directamente de las clases/interfaces en el marco). Utiliza anotaciones para lograr esto. Volveremos a esto más tarde. Pero es importante comprender que Spring es solo una colección de clases e interfaces que están disponibles para su uso :) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes. que son tan familiares para todos nosotros. E incluso escribiremos uno de ellos hoy. Spring intenta en la medida de lo posible evitar un acoplamiento tan estrecho (donde sus clases dependen directamente de las clases/interfaces en el marco). Utiliza anotaciones para lograr esto. Volveremos a esto más tarde. Pero es importante comprender que Spring es solo una colección de clases e interfaces que están disponibles para su uso :) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes. que son tan familiares para todos nosotros. E incluso escribiremos uno de ellos hoy. ) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes que nos son tan familiares. E incluso escribiremos uno de ellos hoy. ) También quiero señalar de inmediato que Spring se puede usar no solo para aplicaciones web, sino también para los programas de consola más comunes que nos son tan familiares. E incluso escribiremos uno de ellos hoy.

Estructura

Pero Spring no es solo un marco en particular. Más bien, es un nombre común que se usa para referirse a varios marcos pequeños, cada uno de los cuales hace su propio tipo de trabajo. Spring for lazy people Foundation, conceptos básicos y ejemplos con código.  Parte 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Figura 2.1. Descripción general del marco Spring

Como puede ver, Spring es modular. Esto nos permite conectar solo los módulos que necesitamos para nuestra aplicación y no conectar aquellos que obviamente no usaremos. Hasta donde yo sé, fue este enfoque el que permitió a Spring superar a su competidor de entonces (EJB) y tomar la delantera. Las aplicaciones que usaban EJB arrastraron muchas dependencias detrás de ellas y, como resultado, resultaron lentas y lentas. La imagen muestra que Spring Framework consta de varios módulos:
  • Acceso a los datos
  • Web
  • Centro
  • y más
Hoy nos familiarizaremos con algunos conceptos que se encuentran en el módulo principal: beans, contexto y otros. Como habrá adivinado, el módulo de acceso a datos contiene herramientas para trabajar con datos (principalmente bases de datos), y el módulo web es para trabajar en una red (incluida la creación de aplicaciones web, que se discutirá más adelante). Además, hay una infraestructura integral que admite Spring: muchos otros proyectos que no están incluidos oficialmente en el marco en sí, pero se integran perfectamente en su proyecto Spring (por ejemplo, Spring Security, que también espero mencionar, es para autenticación de un usuario en un sitio web).

¿Por qué Java tiene Spring Framework?

Bueno, además del hecho de que está a la moda, elegante y fresco, puedo decir ahora mismo que tan pronto como obtengas aunque sea una pequeña cantidad de habilidad usando Spring, entenderás cómo hay todo tipo de trabajo que ya no tienes. hacer, y cuánto trabajo Spring toma sobre sí mismo. Puede escribir un par de docenas de líneas de ajustes de configuración y escribir un par de clases, y termina con un proyecto de trabajo. Pero tan pronto como comience a preguntarse cuántas cosas hay debajo del capó, cuánto trabajo se está haciendo y cuánto código tendría que escribir si fuera a implementar el mismo proyecto basado en servlets o sockets simples y Java puro, se te pondrán los pelos de punta :) La primavera se describe incluso como una especie de magia. Esto lo experimentas cuando ves que todo funciona, pero también tienes una idea aproximada de cómo y cuánto trabajo está sucediendo detrás de escena, por lo que parece que realmente hay algún tipo de magia en acción :) Es más fácil llamarlo magia que tratar de explicar cómo está todo interconectado. :) El segundo argumento a favor de estudiar Spring es que aproximadamente el 90% de las ofertas de trabajo para desarrolladores junior (basado en mis observaciones personales) requieren conocimiento o al menos una idea general de lo que SpringData, Web MVC, y Securitylos módulos ofrecen desarrolladores sofisticados :) Pero hoy se trata solo de lo básico.

DI/IOC

Si alguna vez trató de leer sobre Spring, lo primero que encontró probablemente fueron estos acrónimos: DI/IoC. ¡Ahora le recomiendo que se tome un descanso de este artículo y lea este artículo de DZone ! IoC significa inversión de control. Ya mencioné esto de pasada cuando escribí que usar una biblioteca implica que usted mismo indique en su código qué método llamar a qué objeto, pero que usar un marco generalmente significa que el marco llamará a su código en el momento adecuado. En otras palabras, en este último caso, ya no está administrando el proceso de ejecución del código/programa; el marco lo hace por usted. Pasaste el control al framework (inversión de control). DI significa inyección de dependencia. Con la inyección de dependencia, no creas objetos cat en el método principal y luego los pasas a tus métodos. En cambio, Spring Framework los crea por usted. Simplemente diga algo como "Quiero tener un gato aquí" y el marco le pasa uno en su método. Veremos esta abreviatura en futuros artículos.

Frijoles y contexto

Uno de los conceptos clave en Spring es un frijol. De hecho, esto es solo un objeto de alguna clase. Supongamos que tenemos un programa que requiere 3 objetos: un gato, un perro y un loro. Y tenemos un montón de clases con un montón de métodos. A veces necesitamos un gato para un método, a veces necesitamos un perro para un método diferente y, a veces, nuestros métodos necesitan tanto un gato como un loro (por ejemplo, el método para alimentar al gato, ja, ja). Para otros métodos más, se necesitan los tres objetos. Sí, primero podríamos crear estos tres objetos en el método principal y luego pasarlos a nuestras clases, y luego dentro de estas clases pasarlos a los métodos relevantes... Y así sucesivamente a lo largo de todo el programa. Pero si además suponemos que de vez en cuando queremos cambiar la lista de parámetros de entrada de nuestros métodos (por ejemplo, decidimos reescribir algo o agregar una nueva funcionalidad), entonces tendremos que hacer algunos cambios en el código. Y ahora imagina que no tenemos 3, sino 300 de esos objetos. Una alternativa sería reunir todos nuestros objetos en una lista (List<Object>), páselo a todos los métodos y luego obtenga el objeto necesario dentro de los métodos. Pero a medida que se ejecuta el programa, ¿qué sucede si se agrega algún objeto a esta lista o, peor aún, si se elimina uno? Esto tiene el potencial de romper todos los métodos en los que usamos un índice para obtener objetos de la lista. Para evitar este problema, decidimos almacenar nuestros objetos no en una lista, sino en un mapa, donde la clave es el nombre del objeto y el valor es el objeto mismo. Esto nos permite recuperar los objetos que necesitamos simplemente usando su nombre, por ejemplo, get("loro"), y en respuesta obtenemos el objeto loro. O la clave podría ser la clase del objeto y el valor podría ser el objeto mismo. En este caso, en lugar de especificar el nombre del objeto, podemos especificar la clase del objeto que necesitamos. Eso también es conveniente. O incluso podríamos escribir algún tipo de contenedor para el mapa, donde algunos métodos obtienen objetos por su nombre y otros métodos obtienen objetos por su clase. A lo que hemos llegado aquí se le llamacontexto de aplicación en Spring Framework. Un contexto es una colección de beans (objetos). Accedemos a un contexto para obtener el bean (objeto) que necesitamos por su nombre, por su tipo o por algún otro medio. Además, podemos pedirle a Spring que busque en su propio contexto el bean que necesitamos y lo pase a nuestro método. Por ejemplo, supongamos que tuviéramos un método como este:

public void doSomething(Cat cat) {
    ...
}
Cuando Spring llamó a este método, tomó nuestro objeto gato de su contexto y lo pasó al método. Pero ahora hemos decidido que, además de un gato, nuestro método también necesita un loro. ¡Con Spring, nada podría ser más fácil! Simplemente escribimos:

public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Ahora, cuando Spring llama a nuestro método, comprende la necesidad de pasar un gato y un loro, por lo que va a su contexto, obtiene estos dos objetos y los pasa a nuestro método. Al transferir las riendas del control a Spring, también transferimos la responsabilidad de crear objetos y pasarlos a nuestros métodos, que llamará Spring. Esto plantea la pregunta: ¿cómo sabe Spring qué objetos (beans) crear?

Formas de configurar una aplicación

Hay tres formas principales de configurar una aplicación , es decir, formas de decirle a Spring exactamente qué objetos necesitamos:
  1. Archivos de configuración XML
  2. Configuración basada en Java
  3. configuración automática
Los creadores de Spring los priorizan en este orden:
  • el método con la máxima prioridad, que debe preferirse, es la configuración automática
  • si no se puede usar la configuración automática para configurar correctamente todos los beans posibles, use la configuración basada en Java (que implica crear objetos usando código Java)
  • y el método de prioridad más baja es el antiguo: usar archivos de configuración XML.
Spring también nos permite combinar estos métodos. Por ejemplo, deje que Spring configure todo lo que se puede configurar automáticamente, use la configuración basada en Java siempre que necesite parámetros especiales y use XML para cualquier configuración heredada. Todo esto resulta ser bastante flexible. Aún así, si todo se puede configurar automáticamente, elija esa opción. Solo consideraré la configuración automática y la configuración basada en Java. Las configuraciones XML se utilizan en casi todos los ejemplos de Spring en Internet. Además, una vez que comprenda cómo funciona la configuración basada en Java, no debería tener problemas para leer un archivo XML que hace lo mismo. La configuración automática se usa cuando necesitamos trabajar con objetos de clases que escribimos. Si crear uno de nuestros objetos requiere una lógica muy específica, o si no podemos hacer alguna clase con la anotación necesaria para la configuración automática, entonces podemos usar la configuración basada en Java para hacer lo que se necesita hacer. En elEn la siguiente parte , crearemos un proyecto Maven, conectaremos un par de los módulos principales de Spring y crearemos nuestros primeros beans.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION