C贸mo estudio Spring Framework (la ayuda para principiantes es el trabajo de los principiantes)

Buenas tardes

Me propuse el objetivo de aprender el framework Spring para el lenguaje Java. Durante el estudio, decid铆 comprobar por m铆 mismo el algoritmo de aprendizaje de Richard Feynman: organizar, simplificar y entrenar a otro. En general, comenc茅 a grabar una serie de lecciones cortas para principiantes en el trabajo en primavera. Para aquellos que quieran repetir, present茅 el c贸digo fuente .

Lecci贸n 01. Entendiendo IoC


Entonces, reunamos a los poetas, que compongan y nos lean sus poemas.

Primero, declare la interfaz que genera los versos src \ main \ java \ spring \ interfaces \ Lyricist.java:

package spring.intarfaces; public interface Lyricist { public String Generate(); } 

Implementamos esta interfaz en la clase src \ main \ java \ spring \ impls \ Mayakovsky.java :

 package spring.impls; import spring.intarfaces.Lyricist; public class Mayakovsky implements Lyricist { @Override public String Generate() { return " \r\n" + " \r\n" + " \r\n" + "   ?"; } } 

Escribiremos que crearemos un objeto Mayakovsky espec铆fico en el archivo de configuraci贸n xr src \ main \ resources \ ApplicationContext.xml :

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="LyricistBean1" class="spring.impls.Mayakovsky"/> </beans> 

Identificaci贸n asociada LyricistBean1 con el nombre de la clase Mayakovsky. Casi todo est谩 listo, solo falta la clase de llamada src \ main \ java \ spring \ main \ Start.java :

 package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Lyricist lyr1 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr1.Generate()); ((ConfigurableApplicationContext) context).close();//    } } 

En la clase Start, leemos nuestro archivo de configuraci贸n, creamos una instancia del poeta llamado bean LyricistBean1. Tengo una copia del poeta Mayakovsky. La funci贸n Generate () nos devolvi贸 cadenas inmortales:
Y tu
juego nocturno
podr铆a
en una flauta de tubo de drenaje?

Lecci贸n 02. Seleccionar una instancia para crear a trav茅s del archivo de configuraci贸n


Digamos que un amigo nos ayud贸 y proporcion贸 otra implementaci贸n de nuestra interfaz Lrricist src \ main \ java \ spring \ impls \ Poushkin.java :

 package spring.impls; import spring.intarfaces.Lyricist; public class Poushkin implements Lyricist { @Override public String Generate() { return "   :\r\n" + "   ,\r\n" + "  ,\r\n" + "   ."; } } 

En el archivo de configuraci贸n ApplicationContext.xml, cambie Mayakovsky a Poushkin.

Ejecute el programa Obtenemos un resultado completamente diferente sin reconstruir :
Recuerdo un momento maravilloso
Apareciste ante mi
Como una visi贸n fugaz
Como un genio de pura belleza.

Lecci贸n 03. Frijoles en el c贸digo, no en el archivo de configuraci贸n


Supongamos que no nos gusta dar la elecci贸n de la clase de poeta que estamos creando en manos del destino en el archivo de configuraci贸n.

Cambiar la clase Poushkin.java

  1. Agregar biblioteca de importaci贸n importaciones org.springframework.stereotype.Component;
  2. Ponga la anotaci贸n Componente ("LyricistBean1") antes de la declaraci贸n de clase

As铆 que le dijimos a Spring que quer铆amos ver a Poushkin en la forma del primer poeta, y no a otra persona.

Queda por corregir ligeramente el archivo de configuraci贸n ApplicationContext.xml:

1. Agregue el contexto del espacio de nombres: xmlns: context = " www.springframework.org/schema/context ";

2. Eliminar la l铆nea innecesaria: />

3. Agregue un comando en lugar de 茅l para agregar autom谩ticamente contenedores de todas las clases ubicadas en el directorio spring.impls al programa:

<context: component-scan base-package = "spring.impls" />

Como resultado, el archivo ApplicationContext.xml deber铆a verse as铆:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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-4.3.xsd"> <context:component-scan base-package="spring.impls"/> </beans> 

Empezamos Obtenemos el mismo resultado que en la lecci贸n anterior.

Lecci贸n 04. Clase de configuraci贸n


Vamos a deshacernos del archivo xml por completo.

Todos los ajustes tambi茅n pueden estar en la clase java. A veces es conveniente.

Agregue una clase de configuraci贸n especial src \ main \ java \ spring \ main \ LyricistConfiguration.java a nuestro programa:

 package spring.main; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @ComponentScan(basePackages = { "spring.impls" }) @Configuration public class LyricistConfiguration { } 

@ComponentScan muestra en qu茅 directorio buscar beans.
@Configuration informa que nuestra clase es especial, configuraci贸n.

Eso es todo, el archivo xml ya no es necesario. Queda por informar esta noticia a nuestra clase principal:

  1. Complem茅ntelo con la importaci贸n de importaci贸n necesaria org.springframework.context.annotation.AnnotationConfigApplicationContext;
  2. Reemplazar la l铆nea de creaci贸n de contexto
    ApplicationContext context = new AnnotationConfigApplicationContext (LyricistConfiguration.class);

Como resultado, el archivo principal src \ main \ java \ spring \ main \ Start.java deber铆a verse as铆:

 package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new AnnotationConfigApplicationContext(LyricistConfiguration.class); Lyricist lyr1 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr1.Generate()); ((ConfigurableApplicationContext) context).close();//    } } 

Todo comienza y todav铆a produce l铆neas inmortales de Pushkin. Todo funciona Pero ya sin xml.

Lecci贸n 05. Singleton y prototipo


Explore las capacidades del archivo de configuraci贸n. Por lo tanto, regresemos al proyecto desde la segunda lecci贸n. Intentemos crear dos instancias de la clase Poushkin en Start.java y asegur茅monos de que el gran poeta sea el mismo:

  Lyricist lyr1 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr1.Generate()); System.out.println(lyr1.hashCode()); Lyricist lyr2 = context.getBean("LyricistBean1", Lyricist.class); System.out.println(lyr2.Generate()); System.out.println(lyr2.hashCode()); 

Y los versos son iguales, y el c贸digo hash cae. Todo esta bien.

Agregue a nuestro proyecto un ciudadano simple que no escribe versos src \ main \ java \ spring \ impls \ SimpleMan.java :

 package spring.impls; import spring.intarfaces.Lyricist; public class SimpleMan implements Lyricist { @Override public String Generate() { return "  ,   "; } } 

Registre la clase en el archivo de configuraci贸n (inmediatamente despu茅s del primer bin)
  <bean id="LyricistBean2" class="spring.impls.SimpleMan"/> 


Estamos tratando de crear

  Lyricist lyr1 = context.getBean("LyricistBean2", Lyricist.class); System.out.println(lyr1.Generate()); System.out.println(lyr1.hashCode()); Lyricist lyr2 = context.getBean("LyricistBean2", Lyricist.class); System.out.println(lyr2.Generate()); System.out.println(lyr2.hashCode()); 

El ciudadano es el mismo todo el tiempo. El desorden ...

Cambie el registro del bean en el archivo de configuraci贸n agregando la palabra m谩gica scope = "prototype"

Como resultado, el archivo src \ main \ resources \ ApplicationContext.xml se ver谩 as铆:

 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="LyricistBean1" class="spring.impls.Poushkin" scope="singleton"/> <bean id="LyricistBean2" class="spring.impls.SimpleMan" scope="prototype"/> </beans> 

Ahora todo est谩 bien. Los ciudadanos son diferentes cada vez. Pero Pushkin siempre est谩 solo.

Las personas atentas notaron que la configuraci贸n scope = "singleton" se agreg贸 en el primer bin, pero esta configuraci贸n se usa de manera predeterminada, por lo que no puede escribirla.

Eso es todo por hoy. Si esta publicaci贸n pasa por moderaci贸n, y tengo tiempo y energ铆a, habr谩 una continuaci贸n sobre AOP, JDBC, transacciones, MVC y otra sabidur铆a.

Saludos, Vladimir

Source: https://habr.com/ru/post/es420901/


All Articles