Diferencia entre revisiones de «Groovy Con Spring»
(→Ver también) |
|||
(No se muestran 13 ediciones intermedias de 6 usuarios) | |||
Línea 49: | Línea 49: | ||
http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> | http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> | ||
− | |||
<lang:groovy id="mensajero" | <lang:groovy id="mensajero" | ||
script-source="classpath:MensajeroImpl.groovy" /> | script-source="classpath:MensajeroImpl.groovy" /> | ||
Línea 70: | Línea 69: | ||
@Test | @Test | ||
− | public void | + | public void decirHola() throws InterruptedException { |
String nombre = "Zim"; | String nombre = "Zim"; | ||
String result = instance.decirHola(nombre); | String result = instance.decirHola(nombre); | ||
Línea 90: | Línea 89: | ||
== Ver también == | == Ver también == | ||
− | * [http://static.springframework.org/spring/docs/2.0.x/reference/dynamic-language.html Dynamic language support ] | + | * [[Groovy]] |
+ | * [http://www.dosideas.com/descargas/category/2-spring-framework.html?download=13%3Agroovy-con-spring Descargar proyecto de ejemplo de integración entre Groovy y Spring] | ||
+ | * [http://static.springframework.org/spring/docs/2.0.x/reference/dynamic-language.html Manual de Spring, Dynamic language support ] | ||
+ | |||
+ | [[Category:Spring Framework]] | ||
+ | [[Category: Groovy]] |
Revisión actual del 13:46 24 ago 2011
Spring Framework tiene soporte para integrar Groovy como un bean normal más. Además de Groovy, es posible integrar otros lenguajes dinámicos, como JRuby y BeanShell.
Contenido
Librerías necesarias
Se deben incluir las siguientes librerias:
- groovy-1.0.jar
- asm-2.2.2.jar
- antlr-2.7.6.jar
Todas vienen junto a la distribución de Groovy.
Ejemplo
En este ejemplo crearemos una interfaz en Java, la implementaremos en Groovy, y la declareremos como un bean más en Spring.
El código
Necesitamos crear 3 archivos:
- La interfaz Mensajero.java
- La implementación en groovy MensajeroImpl.groovy
- La configuración de Spring
La interfaz: Mensajero.java
package com.dosideas.dynlang;
public interface Mensajero {
String decirHola(String nombre);
}
El script de implementación: MensajeroImpl.groovy
package com.dosideas.dynlan.groovy;
import com.dosideas.dynlang.Mensajero
class MensajeroImpl implements Mensajero {
String decirHola(String nombre) { "Hola, " + nombre; }
}
Configuración de Spring: applicacion.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" xmlns:lang="http://www.springframework.org/schema/lang" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> <lang:groovy id="mensajero" script-source="classpath:MensajeroImpl.groovy" />
</beans>
Test
Crearemos un test que ejecute esta lógica. Accedemos directamente al bean mensajero, como si fuera un bean normal.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"/application.xml"
}) public class MensajeroTest {
@Autowired private Mensajero instance;
@Test public void decirHola() throws InterruptedException { String nombre = "Zim"; String result = instance.decirHola(nombre); String expResult = "Hola, " + nombre; assertEquals(expResult, result); }
}
Cambios en caliente
Es posible hacer que el script sea modificado y recompilado "en caliente". Es decir, teniendo a nuestra aplicación corriendo, podemos modificar la lógica del script y la misma comenzará a ejecutarse en caliente, sin necesidad de ningún otro cambio. Esta es sin dudas una de las características más interesantes de usar lenguajes dinámicos con Java.
Para activar esta característica hay que usar el atributo refresh-check-delay al momento de declarar el bean en Spring, el cual le indicará cada cuántos milisegundos debe buscar cambios en el script. Por ejemplo:
<lang:groovy id="messenger" script-source="classpath:Messenger.groovy" refresh-check-delay="1000"/>