Diferencia entre revisiones de «Groovy Con Spring»

De Dos Ideas.
Saltar a: navegación, buscar
Línea 1: Línea 1:
[[Category:Spring Framework]]
 
 
[[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.  
 
[[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.  
  
Línea 93: Línea 92:
 
* [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://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 ]
 
* [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 del 19:46 28 ago 2009

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.

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"/>

Ver también