Groovy Con Spring

De Dos Ideas.
Saltar a: navegación, buscar

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