joshavg

The english version of this article is located here: English version

Diese Seite behandelt eins meiner Projekte. Es ist auf GitHub zu finden: SimpleDiContainer

SimpleDiContainer

SimplDiContainer wurde mit dem Ziel entwickelt, ein vernünftiger und für kleine Projekte ausreichender Dependency Injection Container zu sein.

Bei der Entwicklung lag der Schwerpunkt darauf, möglichst wenig magic im Hintergrund laufen zu haben und damit überraschendes Verhalten zu verringern.

Funktionen

SDIC unterstützt ausschließlich Injection über Konstruktoren. Der Hauptgrund dafür besteht darin, dass ein Konstruktur der Teil einer Klasse ist, der die neue Instanz einer Klasse initialisert. Er ist dafür zuständig, dass die Instanz benutzbar ist. Dementsprechend gehört das definieren von Abhängigkeitne ganz klar in seinen Aufgabenbereich. Dies bedeutet auch, dass SDIC genau einen Konstruktor an jeder Klasse, die von ihm instantiiert werden soll, erfordert.

SDIC unterstützt Singletons. Damit sind nicht diese schäbigen Konstrukte mit einer getInstance()-Methode oder einem INSTANCE-Attribute. Ein Singleton in einem Depenency Injection Container ist ein Service, der nur ein einziges Mal instantiiert wird. So lange er vom selben Container angefragt wird, wird immer dieselbe Instanz zurückgegeben.

SDIC wird über eine properties-Datei konfiguriert, weil dieses Datenformat von Java direkt unterstützt wird. YAML, JSON oder andere Formate würden Parserbibliotheken erfodern, die das Artefakt unnötig aufblähen würden.

Konfiguration

Entweder wird im Classpath eine Datei namens sdic.properties abgelegt (in Mavenprojekten unter src/main/resources) und der Container über SdiContainer.load() erstellt, oder die Datei wird irgendwo anders abgelegt und SdiContainer.load(filename) aufgerufen.

Format

sdic.properties:

service.serviceOne: com.group.artifact.services.ServiceOne

service.singletonService: com.group.artifact.services.SingletonService
service.singletonService.singleton: true

Der Schlüssel eines Services fängt mit service. an. Darauf folgt ein frei definierbarer Name. Der Wert des Schlüssels ist der voll qualifizierte Name der Klasse.
Wenn dieser Service als Singleton gehandhabt werden soll, muss ein zweiter Schlüssel im Format service.[name].singleton mit dem Wert true angelegt werden. Sollte ein solcher Schlüssel nicht existieren, gilt der Service nicht als Singleton. Dementsprechend ist es egal, ob der Schlüssel weggelassen, oder auf false gesetzt wird.
Alle weiteren Schlüssel werden ignoriert.

In zukünftigen Versionen kommen eventuell weitere Schlüsselformate hinzu.

Integritätsprüfung

SDIC führt eine grundlegende Integritätsprüfung durch, wenn die angegebene Konfiguration geladen wird. Folgende Fehler werden erkannt:

License

SimpleDiContainer wird unter der GNU GPL v3 veröffentlicht. Alle Informationen dazu können in der beigeleten Lizenzdatei nachgeschlagen werden.