Groovy 使 Spring 更出色,第 2 部分: 在运行时改变应用程序的行为
2009-11-19 00:00:00 来源:WEB开发网定制 Groovy bean
您已经看到了如何使用 refreshable beans 特性使 Groovy bean 在运行时自动更新,并使得应用程序在运行时更加动态。为了使 Groovy bean 更加灵活,Spring 的 Groovy 支持还提供了另一种方式:定制。通过定制,可以将定制的逻辑注入到 Groovy bean 创建过程中。通过 GroovyObjectCustomizer 接口(清单 6 所示),可以在新创建的 GroovyObject 上执行定制逻辑:
清单 6. GroovyObjectCustomizer 接口public interface GroovyObjectCustomizer {
void customize(GroovyObject goo);
}
GroovyObjectCustomizer 是一个回调,Spring 在创建一个 Groovy bean 之后会调用它。可以对一个 Groovy bean 应用附加的逻辑,或者执行元编程,例如替换对象的元类。清单 7 展示了一个实现,该实现输出执行一个 Groovy bean 上的某个方法所花的时间:
清单 7. 性能日志记录 GroovyObjectCustomizerpublic class PerformanceLoggingCustomizer implements GroovyObjectCustomizer {
public void customize(GroovyObject goo) {
DelegatingMetaClass metaClass = new DelegatingMetaClass(goo.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);
}
}
更多精彩
赞助商链接