Grails 使用ExpandoMetaClass.EnableGlobal()的成本是多少?(Groovy)

Grails 使用ExpandoMetaClass.EnableGlobal()的成本是多少?(Groovy),grails,groovy,Grails,Groovy,我想确定我不会因此而导致性能问题。我们正在编写一个简单的货币DSL,有人建议我打开: ExpandoMetaClass.enableGlobally() 然而,我还不能确定这到底意味着什么。它是只在根对象的继承树上启用元类重写,还是将其应用于内存中的每个对象类型 将Expando全局应用于生产实例是否存在风险?Grails已经这样做了,因此无论涉及到什么成本,都已经发生了:) 此设置将默认的元类实现从metalassimpl更改为ExpandoMetaClassExpandoMetaClass

我想确定我不会因此而导致性能问题。我们正在编写一个简单的货币DSL,有人建议我打开:

ExpandoMetaClass.enableGlobally()
然而,我还不能确定这到底意味着什么。它是只在根对象的继承树上启用元类重写,还是将其应用于内存中的每个对象类型


将Expando全局应用于生产实例是否存在风险?

Grails已经这样做了,因此无论涉及到什么成本,都已经发生了:)

此设置将默认的
元类
实现从
metalassimpl
更改为
ExpandoMetaClass
ExpandoMetaClass
是Graeme为Grails编写的,目的是使向元类动态添加方法变得更容易,例如

String.metaClass.bark = { -> println "WOOF!" }

几年前,它就被添加到Groovy core中。

谢谢Burt——这回答了我的担忧。最近刚看了你的几次演讲——非常喜欢你的“最佳最差实践”演讲。哈哈!