Curso Spring - Ejercicio05-ConcursoTalentos-2

Ejercicio: Concurso Talentos v2
Ejercicio
Proyecto Concurso de Talentos v2
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Objetivo del Ejercicio
•El
objetivo del ejercicio es modificar el proyecto de Concurso de
Talentos para poner en práctica la inyección de dependencias.
Al finalizar deberemos tener el Proyecto Concurso Talentos v2 con las
siguientes clases:
Curso de Spring Framework
2
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 1: Inyección por Constructor
•
Inyección de Valores por Constructor. Modificar la definición del
bean en el archivo applicationContext.xml por el siguiente:
<bean id="solei" class="concursantes.Malabarista" >
<constructor-arg value="10" />
</bean>
•
Abrir la clase TestConcursoTalentos.java y modificar la variable
noPelotas a 10:
int noPelotas = 10;
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 2: Ejecutar el Test
•
Ejecutamos el test como JUnit y obtenemos el siguiente resultado:
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Malabarista Recitador
•
Solei es más que un simple malabarista. Además puede recitar
poemas mientras hace malabares.
•
Así que a continuación agregaremos algunas clases más a nuestro
proyecto para definir mejor las características de este sobresaliente
malabarista.
Puedo recitar
bellos poemas
mientras hago
malabares
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 1. Crear la Interface Poema
Crear la interface Poema.java y agregar el siguiente código:
package concursantes;
public interface Poema {
void recitar();
}
Curso de Spring Framework
6
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 2. Crear la clase Soneto
Crear la clase Soneto.java y agregar el siguiente código:
package concursantes;
public class Soneto implements Poema {
public void recitar() {
String sonetoPasionSorJuana =
"Este, que ves, engaño colorido, \n"
+ "que del arte ostentando los primores,\n"
+ "con falsos silogismos de colores\n"
+ "es cauteloso engaño del sentido; \n"
+ "éste, en quien la lisonja ha pretendido\n"
+ "excusar de los años los horrores, \n"
+ "y venciendo del tiempo los rigores \n"
+ "triunfar de la vejez y del olvido, \n"
+ "es un vano artificio del cuidado, \n"
+ "es una flor al viento delicada, \n"
+ "es un resguardo inútil para el hado, \n"
+ "es una necia diligencia errada, \n"
+ "es un afán caduco y, bien mirado, \n"
+ "es cadáver, es polvo, es sombra, es nada. \n";
System.out.println("\nSoneto:" + sonetoPasionSorJuana);
}
}
Curso de Spring Framework
7
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 3. Crear la clase MalabaristaRecitador
Crear la clase Soneto.java y agregar el siguiente código:
package concursantes;
public class MalabaristaRecitador extends Malabarista {
private Poema poema;
public MalabaristaRecitador(Poema poema) {
super();
this.poema = poema;
}
public MalabaristaRecitador(int pelotas, Poema poema) {
super(pelotas);
this.poema = poema;
}
public void ejecutar() throws EjecucionException {
super.ejecutar();
System.out.println("Mientras recita...");
poema.recitar();
System.out.println("Termina recitación...");
}
}
Curso de Spring Framework
8
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 4: Configurar los beans en Spring
•
A continuación declaramos los bean en Spring y realizamos la
inyección de Valores por Constructor, agregando los siguientes
beans al archivo applicationContext.xml :
<bean id="sonetoSorJuana" class="concursantes.Soneto" />
<bean id="soleiRecitador" class="concursantes.MalabaristaRecitador">
<constructor-arg value="10" />
<constructor-arg ref="sonetoSorJuana" />
</bean>
•
La lógica de esta configuración es similar a la siguiente, sin
embargo Spring lo hace a través del API de Reflection:
Poema sonetoSorJuana = new Soneto();
Concursante concursante = new MalabaristaRecitador(10, sonetoSorJuana);
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 5: Modificar la clase Test
•
Reemplazar el código de la clase TestConcursoTalentos.java por el
siguiente:
@Test
public void testMalabarista() {
logger.info("Inicio de ejecutar Malabarista");
package test;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import
org.springframework.context.support.ClassPathXmlApplicationContext;
import static org.junit.Assert.assertEquals;
int noPelotas = 10;
malabarista1.ejecutar();
assertEquals(noPelotas, ((Malabarista) malabarista1).getPelotas());
logger.info("Fin de Ejecutar Malabarista");
logger.info("Inicio de ejecutar MalabaristaRecitador");
import concursantes.Concursante;
import concursantes.Malabarista;
noPelotas = 15;
malabarista2.ejecutar();
assertEquals(noPelotas, ((Malabarista) malabarista2).getPelotas());
public class TestConcursoTalentos {
private static Log logger =
LogFactory.getLog("TestConcursoTalentos");
private Concursante malabarista1;
private Concursante malabarista2;
logger.info("Fin de Ejecutar MalabaristaRecitador");
}
}
@Before
public void before() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"applicationContext.xml");
malabarista1 = (Concursante) ctx.getBean("solei");
malabarista2 = (Concursante) ctx.getBean("soleiRecitador");
}
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012
Ejercicio: Concurso Talentos v2
Paso 6: Ejecutar el Test
•
Ejecutamos el test como JUnit y obtenemos el siguiente resultado:
Curso de Spring Framework
© Derechos
© Derechos
Reservados
Reservados
GlobalGlobal
Mentoring
Mentoring
2011 2012