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 Renderers:

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.