Singleton-Referenz
Als Konfigurationswert kann direkt die Instanz einer Klasse verwendet werden, wenn diese Klasse das Singleton-Pattern implementiert. In diesem Fall muss die Konfigurationseigenschaft mit @InstanceFormat
annotiert werden. In der Konfiguration kann dann über den Klassennamen ein zum Typ der Eigenschaft passende Singleton ausgewählt werden.
Beispielsweise erlaubt die folgende Konfiguration die Auswahl eines Renderer
s:
public interface MyConfig extends ConfigurationItem {
@InstanceFormat
Renderer getRenderer();
}
Renderer
ist hierbei ein Interface für eine Implementierung, die ein übergebenes Objekt z.B. nach HTML ausgibt. Wenn die Anwendung mehrere Renderer
-Implementierungen hat, kann die Konfiguration einen der Renderer über seinen Klassennamen auswählen:
<config
renderer="my.app.MyRenderer"
>
</config>
Hierfür muss die Klasse MyRenderer
lediglich das Singleton-Pattern implementieren:
public class MyRenderer implements Renderer {
/** Singleton {@link MyRenderer}. */
public MyRenderer INSTANCE = new MyRenderer();
private MyRenderer() {}
@Override
public void render(...) {
// Do what a Renderer has to do.
}
}
Das Renderer
-Singleton MyRenderer
muss eine public static final
Konstante INSTANCE
definieren, die einen Renderer
enthält. Dann kann in der Konfiguration auf die Singleton-Instanz über den Klassennamen der Singleton-Klasse verwiesen werden.