Nach Winter kommt Spring

Einführung
Nachdem der erste richtige Job meines Lebens begonnen hat, hatte ich auch gleich die Chance mit spärlichen Vorkenntnissen in mein erstes Kundenprojekt zu kommen. Kostenlos versteht sich. Kunde war ein großer deutscher Finanzdienstleister der beschlossen hatte einige Kernprozesse seines IT-Umfelds auf Java umzustellen.
Darunter wurde in dem Framework auch Spring verwendet. Ein Schlagwort, dass jedem Informatikstudenten schonmal untergekommen ist, aber von dem nur die wenigsten wissen was genau Spring tut.
In diesem Artikel will ich mal mit wenigen Sätzen versuchen das so einfach wie möglich zu verdeutlichen.

Unser Beispiel
Da ich gerne an Beispielen erkläre, nehmen wir uns hier ein Auto vor. Ein Auto kann nur fahren, wenn ein funktionierender Motor darin verbaut ist, wenn es einen gefüllten Tank enthält und wenn ein Fahrer samt Führerschein am Steuer sitzt. Diese Bedingung soll hinreichend sein um unser sehr rudimentäres Auto zum Fahren zu bringen.

Die Vergangenheit
Wenn wir jetzt die Eben aufgezählen Objekte auf die Informatik mappen, sprich eine Klasse CAuto, CMotor, CTank, CFahrer und CFuehrerschein erstellen, dann brauchen wir von jeder Klasse eine Instanz die wir ja gewöhnlich per Constructor wiefolgt erstellen:

CMotor meinMotor = new CMotor();
CTank meinTank = new CTank(true); //true = ist gefüllt
CFuehrerschein meinFuehrerschein = new CFuererschein();
CFahrer meinFahrer = new CFahrer(meinFuehrerschein);
CAuto meinAuto = new CAuto(meinMotor, meinTank, meinFahrer);

Jedesmal, wenn wir also mit “meinAuto” arbeiten müssen, müssen wir alle anderen Objekte auch definieren und erstellen. Das sorg natürlich für eine riesige Menge an Speicher die unnützerweise verbraucht wird und jeder Menge Zeilen die sich immer wieder wiederholen.

Die Zukunft mit Spring
Das Spring-Framework ermöglicht Folgendes:

CAuto meinAuto = getBean("springAuto",CAuto);

Das wars! Wie geht das? Gute Frage! Wir brauchen erstmal eine XML-Datei in der wir unsere Objekte anlegen, also den Motor, den Tank, den Fahrer, den Führerschein und last but not least das Auto. Das Ganze sieht dann etwa so aus:

<BEAN id="springMotor" class="meinBeispiel.CMotor">
	<property name="ps" value="200"/>
</BEAN>
 
<BEAN id="springTank" class="meinBeispiel.CTank">
	<property name="fassungsVermoegen" value="30L"/>
</BEAN>
 
<BEAN id="springFuehrerschein" class="meinBeispiel.CFuehrerschein">
 
</BEAN>
 
<BEAN id="springFahrer" class="meinBeispiel.CFahrer">
	<constructor-arg><ref bean="springFuehrerschein" /></constructor-arg>
	<property name="fahrerName" value="Peter"/>
</BEAN>
 
 
<BEAN id="springAuto" class="meinBeispiel.CAuto">
	<constructor-arg><ref bean="springMotor"/></constructor-arg>
	<constructor-arg><ref bean="springTank"/></constructor-arg>
	<constructor-arg><ref bean="springFahrer"/></constructor-arg>
</BEAN>

Damit weiß Spring nun, wie es die Objekte zu erstellen hat, bzw welche Argumente die Constructors erwarten und welche Properties sie haben. Sollten Getter und Setter statt Public-Eigenschaften verwendet werden (was prinzipiell IMMER der Fall sein sollte), dann ist darauf zu achten, dass die Getter- und Setter-Methoden Set bzw Get+Eigenschaftenname heißen!

In dem Aufruf…

CAuto meinAuto = getBean("springAuto",CAuto);

… kann man sehen, dass als 2. Parameter die Klasse des Objektes übergeben wird. Dies ist nötig, damit das Objekt später richtig injiziert werden kann. Der erste Parameter ist der Spring-Definitions-Name wie wir ihn in der XML festlegen.
Natürlich können jetzt auch einfach Objekte vom Type TMotor, TTank, TFahrer oder TFuehrerschein erstellt werden, dann geht das ganze so:

TMotor meinMotor = getBean("springMotor", CMotor);

usw.

Was Spring also kann
Mit Spring muss man objekte nicht per Constructor erstellen sondern Spring das übernehmen lassen. WICHTIG: vorher Speicher für die Klasse zu reservieren ist auch nicht notwendig, auf Konstrukte wie…

CAuto meinAuto = new CAuto(null,null,null);

…kann also verzichtet werden.
Alle Abhängigkeiten werden dabei von Spring automatisch behandelt, es muss sich also nicht um das erstellen der anderen Objekte gekümmert werden.
Für den allgemeinen Sprachgebrauch ist das ganze vielleicht nicht von Belang, aber in größeren Projekte in denen man beispielsweise Datenbank-Verbindungen in vielen Methoden immer neu erstellen muss, die dann von anderen Objekten abhängen ist das ganze schon eine starke Erleichterung.

2 thoughts on “Nach Winter kommt Spring”

  1. Man könnte sich dieses riesige Framework und das erstellen von XML-Dateien auch einfach sparen und das Erstellen der Objekte in den Konstruktor verlagern. Das diese langweilige POJO-Vorgehensweise scheint wohl niemanden mehr zu beeindrucken.

Leave a Reply to padmalcom Cancel reply

Your email address will not be published. Required fields are marked *