Um ein Format zu definieren, wird eine TL- Schnittstelle ​ConfigurationValueProvider implementiert, da Implementierungen der Java-Standard-Klasse java.text.Format nicht thread-sicher sind. Pro Parse-Vorgang müsste daher eine eigene Instanz von Format angelegt werden. Dies hätte zur Folge, dass statt eines Formates, ein Format-Provider annotiert werden müsste.

Eigene Formate für eigene Typen können also am einfachsten als Ableitung von ​AbstractConfigurationValueProvider erstellt und entweder an ein konkretes Property oder an den selbstdefinierten Werte-Typ annotiert werden.

Komma-separierte Enum-Liste

Um eine Liste von java.lang.Enum zu konfigurieren, kann man eine der bereits existierenden Ableitungen von CommaSeparatedEnum benutzen, z.B. CommaSeparatedMonths, oder eine eigene folgendermaßen definieren:

@Format(CommaSeparatedMyEnums.class)
List<MyEnum> getMyEnums();

public static class CommaSeparatedMyEnums extends CommaSeparatedEnum<MyEnum> {

	public static final CommaSeparatedMyEnums INSTANCE = new CommaSeparatedMyEnums();

	private CommaSeparatedMyEnums() {
		super(MyEnum.class);
	}
}

Shortcut-Format für Subkomponenten (Unterkonfigurationen)

Für Unterkonfigurationen kann ebenfalls ein @Format angegeben werden, um zu erlauben, dass eine Unterkonfiguration (z.B. in häufig vorkommenden einfachen Fällen) direkt als Attribut statt über ein Sub-Tag konfiguriert werden kann (vgl. XML-Binding).

Das Format wird nur verwendet, wenn der Wert in einem Attribut angegeben ist, oder das Konfigurationelement Non-White-Space-Content als Inhalt hat.

Eine Konfiguration für den Typ MainConfig, der wie folgt definiert ist

interface MainConfig extends ConfigurationItem {
   SubConfig getSubConfig();
}

interface SubConfig extends ConfigurationItem {
   int getX();
   int getY();
}

wird in XML standardmäßig wie folgt geschrieben werden:

<main-config>
   <sub-config x="13" y="42"/>
</main-config>

Für die Unterkonfiguration SubConfig kann aber ein Format angegeben werden, das eine kürzere Konfiguration erlaubt:

@Format(PointFormat.class)
interface SubConfig {
  int getX();
  int getY();
}

bzw. an der Eigenschaft

interface MainConfig extends ConfigurationItem {
   @Format(PointFormat.class)
   SubConfig getSubConfig();
}

Wenn das Format PointFormat (als Unterklasse von AbstractConfigurationValueProvider) einen String der Bauart "13,42" in eine Instanz von SubConfig mit entsprechenden Properties übersetzt, lässt sich obige Konfiguration kürzer schreiben, z.B.:

<main-config sub-config="13,42"/>

oder

<main-config>
   <sub-config>13,42</sub-config>
</main-config>

Insbesondere bei komplexen Ausdrücken, für die eine "echte", eigens definierte Domain-Specific-Language (DSL) definiert ist, eignet sich die letzte Form der Eingabe.