Architekturkonzepte in Spring

Modularität als Tugend

Jochen Mader


Viel hat sich getan in der schönen Welt der Enterprise-Software-Entwicklung. Es ist kaum zu bestreiten, dass seit der Veröffentlichung der Java Enterprise Edition 6 eine große Veränderung in der Wahrnehmung derselben eingetreten ist. Plötzlich fühlte man sich als Entwickler ernst genommen, und einige Stimmen prophezeiten den schnellen Niedergang des Spring Frameworks samt seines Ökosystems. Vier Jahre sind seither vergangen, und wir erleben gerade das Erscheinen von Java EE 7 mit. Trotzdem sehe ich keine wirkliche Veränderung, was die Beliebtheit von Spring unter Entwicklern betrifft. Modularität und ein simples, aber mächtiges Programmiermodell sind dabei die wichtigsten Argumente, die für seinen Einsatz angeführt werden.

Im Folgenden möchte ich mir genauer anschauen, was hinter diesen Argumenten steckt und wie sich das in der entsprechenden Architektur niederschlägt.

Der kleinste Kern

Es ist wichtig zu verstehen, was Spring in seinem Innersten zusammenhält. Dafür habe ich einmal nach der kleinstmöglichen Menge an Abhängigkeiten gesucht, mit der sich eine voll lauffähige Anwendung bauen lässt. Das Ergebnis zeigt Listing 1.

Listing 1apply plugin: 'java'apply plugin: 'maven'repositories { mavenCentral()}dependencies { compile 'org.springframework:spring-context:3.2.4.RELEASE'}

Hier findet sich eine einzige Abhängigkeit: spring-context. Der Spring-Kontext und seine Zusatzbibliotheken definieren das, was ich als das Spring-Programmiermodell bezeichnen möchte. In den 2,5 MB transitiv gezogenen Abhängigkeiten findet man alles, was man zum Bauen einer Anwendung braucht.

Da wäre natürlich erst mal der Kontext an sich. Er ist verantwortlich für den Lebenszyklus aller Objekte, die von Spring verwaltet werden, und bietet die Möglichkeit, die Lebensdauer von Objekten an Scopes zu knüpfen. Existieren die einen im Scope Singleton und bleiben so für die gesamte Laufzeit einer Anwendung erhalten, gibt es andere nur für einen (Servlet-)Request oder eine Session. Gleichzeitig besteht die Möglichkeit, eigene Scopes hinzuzufügen (Abstand zwischen zwei Kaffeetassen, Dauer einer Mondphase etc.).

Der Inhalt eines Kontexts kann dabei auf verschiedenste Arten festgelegt werden. Zum Beispiel in einer der altbekannten applicationContext.xml-Dateien oder einer mit @Configuration annotierten Klasse. Wer seinem Projektleiter ein besonderes Geschenk machen will, kann auch eine eigene Quelle programmieren und das Ganze in LaTeX oder einem JSON-Dokument ablegen.

Neben ihrer puren Exist...

Architekturkonzepte in Spring

Modularität als Tugend

Jochen Mader


Viel hat sich getan in der schönen Welt der Enterprise-Software-Entwicklung. Es ist kaum zu bestreiten, dass seit der Veröffentlichung der Java Enterprise Edition 6 eine große Veränderung in der Wahrnehmung derselben eingetreten ist. Plötzlich fühlte man sich als Entwickler ernst genommen, und einige Stimmen prophezeiten den schnellen Niedergang des Spring Frameworks samt seines Ökosystems. Vier Jahre sind seither vergangen, und wir erleben gerade das Erscheinen von Java EE 7 mit. Trotzdem sehe ich keine wirkliche Veränderung, was die Beliebtheit von Spring unter Entwicklern betrifft. Modularität und ein simples, aber mächtiges Programmiermodell sind dabei die wichtigsten Argumente, die für seinen Einsatz angeführt werden.

Im Folgenden möchte ich mir genauer anschauen, was hinter diesen Argumenten steckt und wie sich das in der entsprechenden Architektur niederschlägt.

Der kleinste Kern

Es ist wichtig zu verstehen, was Spring in seinem Innersten zusammenhält. Dafür habe ich einmal nach der kleinstmöglichen Menge an Abhängigkeiten gesucht, mit der sich eine voll lauffähige Anwendung bauen lässt. Das Ergebnis zeigt Listing 1.

Listing 1apply plugin: 'java'apply plugin: 'maven'repositories { mavenCentral()}dependencies { compile 'org.springframework:spring-context:3.2.4.RELEASE'}

Hier findet sich eine einzige Abhängigkeit: spring-context. Der Spring-Kontext und seine Zusatzbibliotheken definieren das, was ich als das Spring-Programmiermodell bezeichnen möchte. In den 2,5 MB transitiv gezogenen Abhängigkeiten findet man alles, was man zum Bauen einer Anwendung braucht.

Da wäre natürlich erst mal der Kontext an sich. Er ist verantwortlich für den Lebenszyklus aller Objekte, die von Spring verwaltet werden, und bietet die Möglichkeit, die Lebensdauer von Objekten an Scopes zu knüpfen. Existieren die einen im Scope Singleton und bleiben so für die gesamte Laufzeit einer Anwendung erhalten, gibt es andere nur für einen (Servlet-)Request oder eine Session. Gleichzeitig besteht die Möglichkeit, eigene Scopes hinzuzufügen (Abstand zwischen zwei Kaffeetassen, Dauer einer Mondphase etc.).

Der Inhalt eines Kontexts kann dabei auf verschiedenste Arten festgelegt werden. Zum Beispiel in einer der altbekannten applicationContext.xml-Dateien oder einer mit @Configuration annotierten Klasse. Wer seinem Projektleiter ein besonderes Geschenk machen will, kann auch eine eigene Quelle programmieren und das Ganze in LaTeX oder einem JSON-Dokument ablegen.

Neben ihrer puren Exist...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang