Spring — одна из немногих платформ Java-приложений, которая широко используется во многих корпоративных проектах. Это стало жизнеспособной альтернативой более стандартным технологиям JEE. Одним из его достоинств является поддержка языков сценариев. В Spring 2.0 появилась всесторонняя поддержка использования динамических языков. Он поддерживает три разных языка сценариев ; JRuby , Groovy и BeanShell .
Иногда в вашем приложении есть определенные модули, которые требуют частых изменений, и на основе этих изменений вам нужно изменить бизнес-логику в своих модулях. Если эти модули были написаны на Java, вы можете представить, что нужно сделать на этом этапе; перекомпилировать, упаковать, заново развернуть. Здесь модули, написанные на этих динамических языках, пригодятся, нет необходимости перекомпилировать или повторно развертывать, чтобы эти изменения вступили в силу. В большинстве случаев вы хотите, чтобы контейнер Spring мог обнаруживать эти изменения, а также получать новое состояние из измененного источника скрипта. Spring также позволяет вам сделать это, установив один простой атрибут.
« Весенние рецепты — подход к решению проблем », написанный Гэри Маком, имеет полную главу, посвященную написанию сценариев весной . Автор охватывает все три динамических языка, поддерживаемых Spring; JRuby , Groovy и BeanShell .
Пример Hello World: любой учебник принято начинать с написания простой программы HelloWorld, верно? Мы собираемся использовать Groovy в этом уроке. В этом руководстве предполагается, что у вас есть некоторые знания о Spring и Groovy. Я использовал Eclipse IDE для этого урока, и для работы с Spring и Groovy в Eclipse вам понадобятся следующие библиотеки в вашем пути сборки.
Итак, давайте начнем с примера HelloWorld здесь.
Шаг 1: Давайте определим интерфейс для нашего сервиса HelloWorld.
package com.springandgroovy;
public interface HelloWorldService {
String sayHello();
}
Шаг 2: Реализация интерфейса в Groovy.
Далее мы реализуем этот интерфейс в Groovy, создав простой скрипт в пакете com.springandgroovy как таковой:
import com.springandgroovy.HelloWorldService;
class HelloWorldServiceImpl implements HelloWorldService {
String name
String sayHello()
{
"Hello $name. Welcome to Scripting in Groovy."
}
}
Шаг 3: Внесите изменения в конфигурационный файл Spring.
Вот файл конфигурации bean-компонента Spring, в который необходимо включить <strong> схему lang </ strong>, чтобы использовать пользовательские теги динамического языка.
<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">
определение компонента для HelloWorldService с поддержкой Groovy выглядит следующим образом:
<lang:groovy id="helloWorldService"
script-source="classpath:com/springandgroovy/HelloWorldServiceImpl.groovy">
<lang:property name="name" value="meera"/>
</lang:groovy>
Это все, что вам нужно, чтобы использовать Groovy с бобами в Spring. Итак, как мы узнаем, что это работает, верно? Давайте напишем простой класс Main и протестируем его в нашей среде IDE.
Шаг 4. Запустите HelloWorldService.
package com.springandgroovy;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorldService service = (HelloWorldService) context.getBean("helloWorldService");
System.out.println(service.sayHello());
}
}
И вы должны увидеть вывод в консоли как таковой:
Шаг 5: обновляемые бобы.
Как я уже упоминал ранее , также, чтобы включить эту функцию , мы должны задать один простой атрибут обновление-регистрацию задержку на <Ланга: Groovy> элемент нашего определения боба как таковые:
<lang:groovy id="helloWorldService"
script-source="classpath:com/springandgroovy/HelloWorldServiceImpl.groovy"
refresh-check-delay="5000">
<lang:property name="name" value="meera"/>
</lang:groovy>
Опять же, как мы узнаем, что это работает, когда мы вносим изменения в наш Groovy Script? Небольшое изменение в нашем классе Main и, и вы должны проверить, что это работает также:
package com.springandgroovy;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
HelloWorldService service = (HelloWorldService) context.getBean("helloWorldService");
System.in.read();
System.out.println(service.sayHello());
}
}
Теперь запустите класс Main в вашей IDE, он остановится в строке System.in.read, внесите несколько изменений в ваш скрипт, сохраните его, нажмите ввод в окне консоли в вашей IDE. Контейнер Spring считывает изменения и печатает результаты в окне консоли.
Изменить скрипт можно так же просто, как добавить несколько специальных символов в методе sayHello () :
String sayHello()
{
"Hello $name!!!. Welcome to Scripting in Groovy."
}
И окно консоли отражает эти изменения:
Шаг 6: Встроенные сценарии.
Spring также позволяет вам встраивать скрипты непосредственно в определения bean-компонентов Spring внутри вашего конфигурационного файла Spring. Я не фанат этого, потому что у него есть недостаток; атрибут обновления не применим для встроенных сценариев. Давайте посмотрим на это в случае, если вам нужно использовать эту функцию:
скопируйте скрипт, который мы написали на шаге 2, и вставьте его в элемент lang: inline-script как таковой:
<lang:groovy id="helloWorldService">
<lang:inline-script>
<![CDATA[
import com.springandgroovy.HelloWorldService;
class HelloWorldServiceImpl implements HelloWorldService {
String name
String sayHello()
{
"Hello $name. Welcome to Scripting in Groovy"
}
}
]]>
</lang:inline-script>
<lang:property name="name" value="meera" />
</lang:groovy>
Запустите класс Main, и вы должны увидеть тот же вывод в окне консоли.
В этом руководстве мы узнали, как использовать Groovy в Spring с использованием внешнего исходного файла сценария, как обновить изменения при изменении исходного файла сценария и, наконец, увидели встроенный сценарий, который был встроен в файл конфигурации Spring. Вы можете обратиться к документации Spring, если вам нужно использовать JRuby или BeanShell. Книга « Весенние рецепты» содержит исходный код для всех трех языков сценариев.
Дополнительные ресурсы:
1. JRuby
2. Groovy
3. BeanShell
4. Spring Framework
5. Spring Recipes