The idea is that any package.class
can have a custom meta class loaded
at startup time by placing it into a well known package with a well
known name.
groovy.runtime.metaclass.[YOURPACKAGE].[YOURCLASS]MetaClass
So your classFoo
in package"bar"
could have a custom meta classFooMetaClass
in package"groovy.runtime.metaclass.bar"
.
generaciondecodigos@nereida:~/Lgroovy/objects$ tree . |-- DelegatingMetaClassPackageImpliedTest.groovy `-- groovy `-- runtime `-- metaclass `-- java `-- lang |-- StringMetaClass.class `-- StringMetaClass.groovy
generaciondecodigos@nereida:~/Lgroovy/objects$ cat -n groovy/runtime/metaclass/java/lang/StringMetaClass.groovy 1 package groovy.runtime.metaclass.java.lang 2 3 class StringMetaClass extends groovy.lang.DelegatingMetaClass 4 { 5 StringMetaClass(MetaClass delegate) 6 { 7 super(delegate); 8 } 9 10 public Object invokeMethod(Object a_object, String a_methodName, Object[] a_arguments) 11 { 12 return "changed ${super.invokeMethod(a_object, a_methodName, a_arguments)}" 13 } 14 }
generaciondecodigos@nereida:~/Lgroovy/objects$ cat -n DelegatingMetaClassPackageImpliedTest.groovy 1 class DelegatingMetaClassPackageImpliedTest 2 { 3 static void main(String[] args) { 4 println "hello world".toString() 5 } 6 }
generaciondecodigos@nereida:~/Lgroovy/objects$ groovyc groovy/runtime/metaclass/java/lang/StringMetaClass.groovy generaciondecodigos@nereida:~/Lgroovy/objects$ groovy DelegatingMetaClassPackageImpliedTest.groovy changed hello world