Главная » Spring » Внедрение в свойства компонентов, управляемых  сценариями Spring

0

Чтобы проиллюстрировать, как реализовать внедрение значений в свойства компонента, управляемого сценарием, перевернем наш пример с лаймом и кокосом с ног на голову. На этот раз кокосом будет компонент, управляемый сценарием, а лаймом – POJO. Сна- чала рассмотрим Java-класс, реализующий интерфейс Lime:

package       com.springinaction.scripting; public class LimeImpl implements Lime {

public  LimeImpl()  {}

public  void  drink()  {

System.out.println("Called  the  doctor  woke  him  up!");

}

}

LimeImpl – это обычный Java-класс, реализующий интерфейс Lime. А ниже приводится его конфигурация в Spring:

<bean  id="lime"  class="com.springinaction.scripting.LimeImpl"  />

Пока ничего особенного. Теперь реализуем класс Coconut как сце- нарий на языке Groovy:

class   Coconut   implements   com.springinaction.scripting.ICoconut   { public void drinkThemBothUp() {

println  "You  put  the  lime  in  the  coconut…" println  "and  drink  ‘em  both  up…"

println "You put the lime in the coconut…" lime.drink()

}

com.springinaction.scripting.Lime lime;

}

Подобно Java-версии, этот класс Coconut выводит первые строки четверостишья и затем вызывает метод drink() свойства lime, завер- шающий это четверостишье. Здесь свойство lime объявлено как не- которая реализация интерфейса Lime.

Теперь осталось лишь сконфигурировать компонент Coconut и внедрить в него компонент lime:

<lang:groovy  id="coconut"

script-source="classpath:com/springinaction/scripting/Coconut.groovy">

<lang:property name="lime" ref="lime" />

</lang:groovy>

Здесь компонент Coconut, управляемый сценарием, объявлен точно так же, как в предыдущем разделе был объявлен компонент Lime. Но, помимо элемента <lang:groovy>, здесь также присутствует элемент

<lang:property>, помогающий выполнить внедрение зависимости.

Элемент <lang:property> можно использовать в описаниях любых компонентов, управляемых сценариями. Он практически иденти- чен элементу <property>, с которым вы познакомились в главе 2, за исключением того, что он предназначен для внедрения значений в свойства компонентов, управляемых сценариями, а не в свойства POJO.

В данном случае элемент <lang:property>  связывает свойство lime

компонента coconut со ссылкой на компонент lime, который в этом

примере является компонентом JavaBean. Кому-то может показать- ся интересной возможность внедрения компонентов, управляемых сценариями, в свойства других компонентов, также управляемых сценариями. В действительности вполне возможно внедрить ком- понент со сценарием на языке BeanShell в компонент со сценарием на языке Groovy, который, в свою очередь, внедрен в компонент со сценарием на языке Ruby. Более того, хоть это и выглядит слишком экстремально, на языках сценариев теоретически возможно напи- сать все приложение!

Источник:   Уоллс К., Spring в действии. – М.: ДМК Пресс, 2013. – 752 с.: ил.

По теме:

  • Комментарии