©
本文档使用
php中文网手册 发布
本章的大部分内容的关注点都在描述Spring对动态语言的支持的细节上。在深入到这些细节之前,首先让我们看一个使用动态语言定义的bean的快速上手的例子。第一个bean使用的动态语言是Groovy(这个例子来自Spring的测试套件,如果你打算看看对其他语言的支持的相同的例子,请阅读相应的源码)。
下面是Groovy bean要实现的Messenger接口。注意该接口是使用纯Java定义的。依赖的对象是通过Messenger接口的引用注入的,并不知道其实现是Groovy脚本。
package org.springframework.scripting;
public interface Messenger {
String getMessage();
}
下面是依赖于Messenger接口的类的定义。
package org.springframework.scripting;
public class DefaultBookingService implements BookingService {
private Messenger messenger;
public void setMessenger(Messenger messenger) {
this.messenger = messenger;
}
public void processBooking() {
// use the injected Messenger object...
}
}
下面是使用Groovy实现的Messenger接口。
// from the file 'Messenger.groovy'
package org.springframework.scripting.groovy;
// import the Messenger interface (written in Java) that is to be implemented
import org.springframework.scripting.Messenger
// define the implementation in Groovy
class GroovyMessenger implements Messenger {
String message
}
最后,这里的bean定义将Groovy定义的Messenger实现注入到DefaultBookingService类的实例中。
要使用用户定制的动态语言标签来定义 dynamic-language-backed bean,需要在Spring XML配置文件的头部添加相应的XML Schema。同样需要Spring的ApplicationContext实现作为IoC容器。Spring支持在简单的BeanFactory实现下使用dynamic-language-backed bean,但是你需要管理Spring内部的种种细节。
关于XML Schema的配置,详情请看附录 A, XML Schema-based configuration 。
<?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">
<!-- this is the bean definition for the Groovy-backed Messenger implementation -->
<lang:groovy id="messenger" script-source="classpath:Messenger.groovy">
<lang:property name="message" value="I Can Do The Frug" />
</lang:groovy>
<!-- an otherwise normal bean that will be injected by the Groovy-backed Messenger -->
<bean id="bookingService" class="x.y.DefaultBookingService">
<property name="messenger" ref="messenger" />
</bean>
</beans>
现在可以象以前一样使用bookingService bean (DefaultBookingService)的私有成员变量 messenger,因为被注入的Messenger实例确实是一个真正的Messenger实例。这里也没有什么特别的地方,就是简单的Java和Groovy。
但愿你能够无需多加说明就看明白以上的XML片段,而不用太担心它是否恰当或者是否正确。请继续阅读更深层次的细节以了解以上配置的原因。