La desventaja de los lenguajes compilados, es que si quisiéramos hacer un cambio, para que se aplique este cambio hay que volver a compilar. No estoy diciendo nada nuevo, en java por ejemplo se usan archivos xml para hacer dinámicamente cambios. Hay situaciones en las cuales necesitamos hacer cambios dinámicos en nuestra aplicación pero no podemos recompilar. La solución es cantada usar algún lenguaje script.
Imaginemos que tengo toda mi arquitectura en java, y se nos presenta el problema anterior. Bueno spring nos permite ejecutar beans escritos en lenguaje script.
Vamos a desarrollar un ejemplo. Vamos a programar el famoso saludador:
package com.emanuel.prueba;
public class Saludador {
public void saludar {
this.saludo.decirHola();
}
private Saludo saludo;
public void setSaludo(Saludo saludo) {
this.saludo = saludo;
}
}
El Saludador tiene un Saludo el cual se inyecta con spring.
package com.emanuel.prueba;
public interfaz Saludo {
void decirHola();
}
Ahora inyectémosle al Saludador el Saludo.
<bean id=”elSaludador” class=”com.emanuel.prueba.Saludador” >
<property name=”saludo” ref=”saludo” />
< /bean>
Hasta ahora no hemos hecho nada nuevo, lo único que nos falta es implementar la interfaz Saludo, y lo vamos a hacer en JRuby.
Para programar beans scripts spring nos permite elegir entra JRuby, Groovy , BenShell y Jython. Para el ejemplo voy a usar JRuby:
class Saludo
def decirHola
puts “Holasssss amigos”
end
end
Saludo.new
Una cosa muy importante es la ultima línea ya que es lo que nos va a dar una instancia de Saludo. Ahora a decirle a spring que tenemos nuestro bean implementado con otro JRuby.
< 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.0.xsd
http://www.springframework.org/schema/lang
http://www.springframework.org/schema/lang/spring-lang-2.0.xsd">
< lang:jruby id="saludo"
script-source="classpath:dondeDejeElarchivo/saludo.rb "
script-interfaces=” com.emanuel.prueba.Saludo”
refresh-check-delay=”5000” />
< /beans>
Y listo!!
Existe un tag para cada lenguaje: lang:jruby, lang:groovy, lang:bsh, etc.
El atributo refresh-check-delay indica cada cuantos mili segundos se va a actualizar el codigo, lo que permitira que nuestros cambios se vean reflejados.
Todo esto lo podemos hacer gracias a la magia de spring!!!