Groovy使Spring更出色,第2部分: 在运行时改变应用程序的行为 - 编程入门网
基本上,依赖可刷 新 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 定义中
现在,如果在应用程序正在运行时对 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
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |