vamsi kalapala
vamsi kalapala

Reputation: 33

How/When is the Groovy MetaClassRegistry populated?

I read that every POJO used in Groovy gets a MetaClass associated with it. These meta-classes are stored in the application wide metaclass registry. How are these meta-classes generated and placed in the meta-class registry? If each POJO gets its own meta-class, is there some sort of template that is used to generate these meta-classes?

Upvotes: 1

Views: 166

Answers (1)

Jeff Scott Brown
Jeff Scott Brown

Reputation: 27245

I read that every POJO used in Groovy gets a MetaClass associated with it.

FYI... It isn't just POJO. Every class has a meta class associate with it.

These meta-classes are stored in the application wide metaclass registry.

That registry is represented in groovy.lang.MetaClassRegistry. You can get a reference to the registry from GroovySystem.html#getMetaClassRegistry().

How are these meta-classes generated and placed in the meta-class registry?

There is no one way. You can write your own custom meta class and register it, Groovy registers default meta classes, you could replace a metaClass in the registry momentarily (while a unit test runs, for example) and then replace it with the original one after.

At runtime you could use methods like MetaClassRegistry.html#getMetaClass(java.lang.Class), MetaClassRegistry.html#setMetaClass(java.lang.Class,groovy.lang.MetaClass), and MetaClassRegistry.html#removeMetaClass(java.lang.Class) to manipulate the registry.

If each POJO gets its own meta-class, is there some sort of template that is used to generate these meta-classes?

docs.groovy-lang.org/latest/html/api/groovy/lang/MetaClass is the closest thing to a template but aside from satisfying standard compile time restrictions of having to implement all the abstract methods, there could be any arbitrary logic in a meta class one might write.

Upvotes: 2

Related Questions