快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
getMetaClass())  {        @Override        public Object invokeMethod(Object object, String  method, Object[]  args) {          long start = System.currentTimeMillis();          Object result = super.invokeMethod(object,  method, args);          long elapsed = System.currentTimeMillis() -  start;          System.out.printf("%s took %d millis on %s\n",  method, elapsed,  object);          return result;        }      };      metaClass.initialize();      goo.setMetaClass(metaClass);    } }

Groovy使Spring更出色,第2部分: 在运行时改变应用程序的行为(4)

时间:2011-08-27 IBM Scott Leberknight

清单 7 中的 PerformanceLoggingCustomizer 替换 GroovyObject 的元类, 并覆盖 invokeMethod, 以便添加性能计时(performance-timing)逻辑。接下来,需要配置定制程序, 以便将它应用到一个或 多个 Groovy bean 上。清单 8 展示了如何使用 <lang:groovy> 中的 customizer-ref 属性将一 个定制程序添加到一个已有的 Groovy bean 中:

清单 8. 配置一个 Groovy 对象定制程序

<bean  id="performanceLoggingCustomizer"     class="groovierspring.PerformanceLoggingCustomizer"/> <lang:groovy id="pdfGenerator"    refresh-check-delay="60000"    script- source="classpath:groovierspring/GroovyPdfGenerator.groovy"    customizer-ref="performanceLoggingCustomizer">    <lang:property name="companyName" value="Customized Groovy  Bookstore"/> </lang:groovy>

现在,当 GroovyPdfGenerator 中的任何方法被调用时,您将在标准输出中看 到如下所示的输出。( 如果您正考虑使用一个日志记录框架会更好,那么您的想法是对的!)

pdfFor took 18 millis on  groovierspring.GroovyPdfGenerator@f491a6

为 Groovy bean 添加定制很简单;较难的部分是实现实际的定制逻辑 — 也 就是说,当 Groovy bean 被创建时,您想对它们做什么。您看到了使用 <lang:groovy> 和它 的 customizer-ref 属 性的配置。如果您更喜欢使用 Grails Bean Builder 来构建 Spring bean,那么 也很简单。清单 9 展 示了如何添加 peformanceLoggingCustomizer bean:

清单 9. 使用 Grails Bean Builder 添加一个 Groovy 对象定制程序

builder.beans  {    performanceLoggingCustomizer(PerformanceLoggingCustomizer)    scriptFactoryPostProcessor(ScriptFactoryPostProcessor) {      defaultRefreshCheckDelay = 20000    }    pdfGenerator(GroovyScriptFactory,           ''classpath:groovierspring/GroovyPdfGenerator.groovy'',           performanceLoggingCustomizer) { bean ->      companyName = ''Refreshable Bean Builder Bookstore''      bean.beanDefinition.setAttribute(        ScriptFactoryPostProcessor.REFRESH_CHECK_DELAY_ATTRIBUTE,  60000)    } }

更巧妙的数据库

不需要使用 JAR,Spring 提供了对内联脚本和通过 Spring Resource 抽象装 载的脚本的支持。在 第 1 部分 中,您看到了内联脚本和基于 Resource 的脚本 — 尤其是 CLASSPATH 资源。您使用 可刷 新 bean 添加了更多的动态行为。Spring 装载、编译和

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号