Cómo aprendo Spring framework - parte 2 (ayuda para principiantes - el trabajo de los principiantes mismos)



Buenas tardes

Me inspiró la invitación para continuar publicando, así que continúo.

Esta vez consideraremos las principales opciones para implementar la dependencia, a través del constructor y los configuradores. Buscar todas las fuentes aquí

Lección 06. Implementación a través del constructor.


Nuevamente, tome el proyecto de la lección 2 como base.

Agrega otro poeta. src \ main \ java \ spring \ impls \ Severyanin.java

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

Registre la clase en el archivo de configuración 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.Poushkin"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> </beans> 

A principios del siglo XX, los duelos literarios eran muy populares.

Arreglaremos un duelo literario entre dos poetas. Para hacer esto, cree la escena src \ main \ java \ spring \ impls \ Stage.java

 package spring.impls; import spring.intarfaces.Lyricist; public class Stage { private Lyricist lyr1; private Lyricist lyr2; public Stage(Lyricist lyr1, Lyricist lyr2) { this.lyr1 = lyr1; this.lyr2 = lyr2; } public void Act() { System.out.println(" :"); System.out.println(lyr1.Generate()); System.out.println(); System.out.println(" :"); System.out.println(lyr2.Generate()); System.out.println(); System.out.print("    "); if (Math.random() < 0.1) { System.out.println(" ."); } else { System.out.println(" ."); } } } 

En principio, puede cambiar src \ main \ java \ spring \ main \ Start.java , y funcionará:

 package spring.main; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import spring.impls.Stage; import spring.intarfaces.Lyricist; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Lyricist lyr1 = context.getBean("LyricistBean2", Lyricist.class); Lyricist lyr2 = context.getBean("LyricistBean3", Lyricist.class); Stage myStage = new Stage(lyr1, lyr2); myStage.Act(); ((ConfigurableApplicationContext) context).close();//   } } 

Comenzamos, todo funciona. Los poetas emitieron una obra maestra, la segunda, muy probablemente, ganó. Así debería ser, el 27 de febrero de 1918 en el Museo Politécnico en la Elección del Rey de los Poetas Norteño derrotó a Mayakovsky. Pero le dimos a Vladimir Vladimirovich una pequeña oportunidad. Quizás en tu versión ganó.

Ahora haremos todos los ajustes en el archivo de configuración src \ main \ resources \ ApplicationContext.xml , no vale la pena configurar explícitamente los beans en el archivo de inicio.

 <?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"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> <bean id="StageBean" class="spring.impls.Stage"> <constructor-arg ref="LyricistBean2" /> <constructor-arg ref="LyricistBean3" /> </bean> </beans> 

Por lo general, los beans se crean con el constructor predeterminado sin argumentos. Pero en nuestro caso, no funcionará. Pasemos como argumentos argumentos a otros contenedores generados de Mayakovsky y Severyanin.

Queda por eliminar todo lo innecesario de la clase 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.impls.Stage; public class Start { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml"); Stage myStage = context.getBean("StageBean", Stage.class); myStage.Act(); ((ConfigurableApplicationContext) context).close();//   } } 

Empezamos Todo funciona Se crean frijoles. El norteño volvió a ganar.

De todos modos, en mi realidad.

Ahora veamos cómo se pueden configurar los setters.

Lección 07. Implementación a través de setters.


Seguimos atormentando el proyecto anterior.
Probablemente sea incorrecto crear poetas al crear una escena.
Corrija este descuido y cambie ligeramente la clase de la escena. Eliminemos el constructor y agreguemos setters para lyr1 y lyr2 de src \ main \ java \ spring \ impls \ Stage.java

 package spring.impls; import spring.intarfaces.Lyricist; public class Stage { private Lyricist lyr1; private Lyricist lyr2; public void setLyr1(Lyricist lyr1) { this.lyr1 = lyr1; } public void setLyr2(Lyricist lyr2) { this.lyr2 = lyr2; } public void Act() { System.out.println(" :"); System.out.println(lyr1.Generate()); System.out.println(); System.out.println(" :"); System.out.println(lyr2.Generate()); System.out.println(); System.out.print("    "); if (Math.random() < 0.1) { System.out.println(" ."); } else { System.out.println(" ."); } } } 

Modifique el archivo de configuración src \ main \ resources \ ApplicationContext.xml . Eliminamos los argumentos del constructor y agregamos los valores de establecimiento.

 <?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"/> <bean id="LyricistBean2" class="spring.impls.Mayakovsky"/> <bean id="LyricistBean3" class="spring.impls.Severyanin"/> <bean id="StageBean" class="spring.impls.Stage"> <property name="lyr1" ref="LyricistBean2"></property> <property name="lyr2" ref="LyricistBean3"></property> </bean> </beans> 

La clase de inicio en este caso no se puede tocar. Empezamos Todo funciona Tenga en cuenta que el constructor con dos parámetros no se inicia para la escena, pero después de crear la escena, se establecen dos establecedores.

Continuará ...

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


All Articles