快速业务通道

Groovy使Spring更出色,第2部分: 在运行时改变应用程序的行为 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
基本上,依赖可刷 新 bean 的 bean 都拥有对一个 AOP 代理而不是 bean 本身的引用。

事情变得真正有趣起来。假设您经常要在应用程序正在运行时对 PDF 生成代 码进行更改,并使这些 更改立即生效。Spring 使得这种功能的添加变得很简单。您只需为定义 bean 的 <lang:groovy> 元素添加 refresh-check-delay 属性。该属性定义一个毫秒数,每过这么长时间 ,Spring 检查对底层 Groovy 脚本的更改。如果检测到对脚本的更改(例如,自上次检查后,.groovy 脚本上的时间戳被改变 ),那么 Spring 读取脚本,编译它,并用新的版本替换 旧的 pdfGenerator bean。Spring 这样做时 ,任何使用 pdfGenerator 的 bean 都不需要知道这种变化。

清单 2 显示了 pdfGenerator bean,它被配置了 10 秒(10,000 毫秒)的刷 新检查延迟。添加 refresh-check-delay,之后,Spring 配置这个 bean,使之在底层 GroovyPdfGenerator.groovy 脚本 文件改变时自动刷新。

清单 2. 将 refresh-check-delay 添加到脚本化的 bean 定义中

<lang:groovy id="pdfGenerator"         script- source="classpath:groovierspring/GroovyPdfGenerator.groovy"         refresh-check-delay="10000">    <lang:property name="companyName" value="Refreshable Groovy  Bookstore"/> </lang:groovy>

现在,如果在应用程序正在运行时对 GroovyPdfGenerator.groovy 脚本做出 更改,Spring 将检测到 这一更改,并在运行时重新装载 pdfGenerator bean,而不必重新启动。注意, 只有达到规定的延迟时 间,并且 可刷新 bean 上发生方法调用,才会发生刷新检查。例如,假设 pdfGenerator bean 的刷新 检查延时为 10 秒,但是连续 50 秒内没有发生方法调用。在这种情况下, Spring 会在 50 秒之后(而 不是每过 10 秒)检查是否需要刷新。换句话说,Spring 不会积极地轮询脚本的 更改;相反,它判断自 上次方法调用后经过的时间,然后计算这段时间是否超过刷新检查延时。只有当 经过的时间超过刷新检 查延时,Spring 才检查脚本是否被更改,进而确定是否需要刷新。另一方面,假 设 pdfGenerator bean 处于较重的负载下,每一秒钟它的方法被多次调用。如果 refresh-check-delay 为 10 秒,无论这个 bean 被使用多少次,它最快只能每 10 秒重新装载一次。所以,不需要担心 Spring 是否会因为积极地 轮询 Groovy 脚本而消耗系统资源,它并没有这样做。

如果 Spring 应用程序中有不止一个脚本化的 Groovy bean,您想为所有这些 bean 的刷新检查延时 设置一个默认值,那么可以使用 <lang:defaults> 元素轻松做到这一点, 如清单 3 所示:

清单 3. 设置默认刷新检查延时

<lang:defaults refresh-check-delay="20000"/>

通过使用清单 3 中显示的 <lang:defaults>,所有 脚本化动态语言 bean(那些用 Groovy、 JRuby、BeanShell 等编写的 bean)的刷新检查延时都被设为 20 秒。对于要使 用不同值的 bean,只需 添加一个 refresh-check-delay 属性覆盖默认值。甚至可以通过将 refresh- check-delay 设置为一个 负值,关闭 单个脚本化的 bean 的自动刷新行为,如清单 4 所示:

清单 4. 覆盖默认的 refresh-check delay

<lang:defaults refresh-check-delay="20000"/> <lang:groovy id="pdfGenerator"         script- source="classpath:groovierspring/GroovyPdfGenerator.groovy"         refresh-check-delay="60000">    <lang:property name="companyName" 

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号