Статьи

Весна и сценарии

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