您的位置:首页 > 编程语言 > Ruby

Spring 2.0+ JRuby 快速入门五(其它支持功能)

2008-11-17 20:18 225 查看
其它支持功能
  在上一节中,我们知道Spring能够将动态语言编写的脚本“改装”成Java语言可以调用的Bean。除此以外,Spring还提供了两个引人注目的支持,那就是动态刷新和内联脚本。前者允许在不重启Spring容器的情况下使脚本文件的变化生效,而后者则允许你在Spring配置文件中编写脚本程序。

  动态刷新

  动态刷新的Bean可以监控底层脚本文件的变化,一旦脚本文件内容发生改变就可以自动重新加载,无需重启Spring容器。

  通过很小的配置动作就可以让基于动态语言的Bean拥有动态刷新功能:只要在动态语言对应的配置元素中使用refresh-check-delay属性指定刷新周期的毫秒数就可以了。请看下面例子:


<lang:jruby id="bbtForum1"
refresh-check-delay="30000" ①指定刷新的时间周期,单位为毫秒
script-interfaces="com.baobaotao.service.BbtForum"
script-source="classpath:RubyBbtForum.rb">
<lang:property name="desc" value="This is a baby's Forum(jruby)" />
</lang:jruby>


  在①处,我们指定针对bbtForum1 Bean的动态刷新周期为30秒。当开发者在外部改变了RubyBbtForum.rb脚本文件的内容,Spring将动态载入更新的内容。将refresh-check-delay指定为负值(如-1)即可关闭动态刷新的功能。默认情况下,刷新功能就是关闭的。

  动态刷新功能对于开发期测试是很有用的,虽然说启动Spring容器并不需要花费多少时间,但不重启Spring容器就可以使调整生效将可以带来更大的便利。

  内联脚本

  所谓内联脚本,就是允许在Spring配置文件中定义脚本语句,以得到和使用外部脚本文件相同的效果。由于内联脚本直接在Spring配置文件中,会导致冗长配置文件,而且在配置文件中编写的脚本文件不能享受代码高亮,诱导输入的好处,所以这个功能一般只适合于进行一些简单的测试。

  Spring通过<lang:inline-script>元素定义内联脚本,下面的配置将RubyBbtForum.rb脚本文件的攀?畱瑯?? ?o??ū内容转移到Spring配置文件中:

  代码清单 6 applicationContext.XML:内联脚本 …
<lang:jruby id="bbtForum4"
script-interfaces="com.baobaotao.service.BbtForum">
<lang:inline-script> ①内联脚本
<![CDATA[
require 'Java'
include_class 'com.baobaotao.service.BbtForum'
class RubyBbtForum < BbtForum
def setDesc(desc)
@@desc = desc
end
def getDesc
@@desc;
end
end
RubyBbtForum.new
]]>
</lang:inline-script>
<lang:property name="desc"
value="This is a baby's Forum(jruby)" />
</lang:jruby>

  <lang:inline-script>必须在<lang:property>元素之前进行定义,否则会发生错误。由于脚本内容块常常会包括一些XML特殊字符,所以一般情况就需要使用<![CDATA[]]>将脚本内容封装起来。

  小结

  动态语言在经历过几年的沉寂后又开始重放异彩,各种类型的动态语言不断涌现。其中JRuby、Groovy和BeanShell都采用特殊的Java编译器进行工作,它们最终可以被编译成标准的Java字节码。Spring目前对以上三种动态语言提供了支持,你不但可以在Spring配置文件定义基于Java实现的Bean,还可以定义基于动态语言的Bean。它们的最终表现并没有什么区别,底层的实现对于调用者是透明的。

  虽然Spring支持动态语言编写的Bean,但是到目前为止,我们并没有看到多少使用动态语言Bean的应用案例,应该说大多的介绍停留在技术层面,有待于继续探索动态语言集成Spring应用的具体实践。所以除非你确定动态语言Bean能给你的应用带来明显的好处,否则对这一实现技术应保持谨慎态度。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息