繁体中文
设为首页
加入收藏

推荐

公告

推荐文章
· 新手入门:写Java程序的三...
· Java SE 6新特性:Instru...
· Java SE 6 新特性: HTTP...
· Hibernate的检索策略小结
· AJAX推送与拉取方式的比较
· Java有能力抵挡LAMP的进...
· Hibernate+Struts的J2EE...
· 想动就“动”-Java也可以...
· Spring 2.0+ JRuby 快速入门
· 对J2EE中的DAO组件编写单...
热点文章
广告

当前位置:设计首页 >> 程序开发 >> Java >> Spring 2.0+ JRuby 快速入门

Spring 2.0+ JRuby 快速入门 (7)

2008-01-02 09:46:24  作者:  来源:互联网  浏览次数:41  文字大小:【】【】【
简介:  随着Ruby,特别是Ruby on Rail在应用领域所取得的成功,近两年来动态语言成为炙手可热的技术之一。由于动态语言灵活、松散的结构,使得实现某些功能特别方便。Spring 顺应时势,在Spring 2.0中适时推出了对 ...
关键字:Spring 2.0 JRuby
  其它支持功能

  在上一节中,我们知道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能给你的应用带来明显的好处,否则对这一实现技术应保持谨慎态度。
[1] [2] [3] [4] [5] [6] [7]


相关文章