Zum Inhalt springen
Anjunar/ DOCS

Registry

ReflectRegistry ist eine globale Zuordnung von Typnamen zu Deskriptoren. Registriere einen Typ einmal und suche, erzeuge und prüfe ihn danach über seinen Namen.

Registrieren

Mit Accessoren und Factory

register reflektiert den Typ mit Accessoren, bindet Laufzeitklasse und Factory und legt ihn unter vollem und einfachem Namen ab.

ReflectRegistry.loadClass("demo.Query").map(_.simpleName)
Some(Query)
ReflectRegistry.loadClassBySimpleName("Query").isDefined
true
ReflectRegistry.createInstance("demo.Query")
Some(Query(select * from dual))
ReflectRegistry.getPropertyAccessor("demo.Query", "sql").isDefined
true
scala
import reflect.ReflectRegistry ReflectRegistry.register(() => Query("select * from dual")) ReflectRegistry.loadClass("demo.Query") ReflectRegistry.createInstance("demo.Query") ReflectRegistry.getPropertyAccessor("demo.Query", "sql")
Andere Einträge

Selbst gebaute Deskriptoren

registerByTypeName legt einen beliebigen Deskriptor ab, etwa einen mit gebundener Laufzeitklasse und Factory.

scala
val descriptor = ReflectMacros.reflect[Query] ReflectRegistry.registerByTypeName( descriptor.typeName, descriptor.bindRuntimeClass(classOf[Query]).bindFactory(() => Query("select 1")) )
Globaler Zustand

Die Registry lebt so lange wie das Programm. Tests, die Typen registrieren, sollten ReflectRegistry.clear() aufrufen; Code, der Isolation braucht, nimmt einen ReflectClassLoader.