Spring

Spring ist ein umfangreiches Framework für die Entwicklung von Applikationen auf Basis der Programmiersprache Java. Insbesondere im Zusammenhang mit der J2EE-Plattform ist Spring ein Standard Framework, das als Open Source für alle möglichen Ausprägungen von Java-Applikationen zur Verfügung steht. Hintergrund der Entwicklung von Spring war es, eine leichtgewichtige (lightweight framework) Alternative zu den oft komplexen J2EE-Architekturen zu realisieren. Dazu basiert Spring auf einem POJO-orientieren Programmiermodell. Komplexere Architekturen sind bei Verwendung von Spring einfacher testbar, und der Quellcode ist leichter zu pflegen, so dass Spring einen nachhaltigen Einfluss auf das Design einer Anwendung hat. Spring setzt im Kern das Konzept Dependency Injection (DI) um und berücksichtigt weiterhin die Mechanismen der aspektorientierten Programmierung (AOP).


Die Strukturen von Spring sehen die integrative Verwendung von anderen Frameworks und Standards wie Enterprise JavaBeans (EJB) oder Hibernate vor - Spring ist ein Meta-Framework und kann durch seine Unabhängigkeit von einer bestimmten Plattform in die unterschiedlichsten Architekturen eingebunden werden. So wird Spring in vielen Applikationsservern wie Tomcat, Jetty, JBoss, Glasfisch u.a. oder auch in eigener Umgebung standalone eingesetzt. Dafür definiert Spring auch entsprechende Mechanismen zur Sicherheit. Verteilte Anwendungen sowie verteilte Transaktionen sind ebenso möglich da mit dem Einsatz von Spring eine hohe Ausfallsicherheit und eine entsprechende Skalierbarkeit garantiert sind. Unter den u.g. Links steht sowohl das Spring Framework zum Download bereit sowie eine Reihe weiterer Informationen zu Spring.

Die Historie von Spring

Kurz zur Geschichte von Spring: Begonnen hat es mit einem Framework mit Namen interface21, das von Rod Johnson in seinem Buch "Expert One-on-One J2EE Design and Development" publiziert wurde, und für die Unterstützung seiner eigenen Applikationen gedacht war. Daraus ist aufgrund der hohen Resonanz im Februar 2003 das Open-Source-Projekt Spring entstanden. Das Projekt wird bei Sourceforge gehostet und beschäftigt aktuell eine Reihe von Entwicklern mit der Weiterentwicklung und dem Support von Spring. Die aktuelle Version des Frameworks gibt es unter dem u.g. Link. Darunter lassen sich auch weitere Projekte finden, die sich im Umfeld von Spring entwickelt haben. Insbesondere ist zum Beispiel auch eine auf die .NET-Plattform portierte Version verfügbar. Hier nachfolgend ein kurzer Überblick über weitere Projekte:

  • Spring Webs Service zur Realisierung von Web-Services.
  • Spring Security zur Realisierung von Sicherheits-Aspekten in Java- und Web-Anwendungen.
  • Spring LDAP zur Realisierung von Zugriffen auf LDAP-Systeme.
  • Spring Rich Client zur Realisierung von Rich Client-Anwendungen auf Basis von Spring.
  • Spring Modules mit einer Zusammenfassung von Tools und Erweiterung für Spring.
Weitere Projekte sind über die u.g. Links verfügbar.

Das Framework von Spring

Spring wird typischerweise als sogenanntes Lightweight Framework für das Erstellen von Java Applikationen beschrieben. Darüber hinaus muss jedoch hinzugefügt werden:

  • Das Spring-Framework kann für alle Arten von denkbaren Java-Applikationen genutzt werden.

    Architektur einer typischen Spring-basierten 
   Webanwendung

    Architektur einer typischen Spring-basierten Webanwendung

    Es ist beispielsweise nicht nur wie das Framework Struts von Apache auf Web-Applikationen limitiert. Die Abbildung zeigt beispielhaft die Architektur einer typischen Spring-basierten Web-Anwendung.
  • Leichtgewichtig bedeutet in diesem Zusammenhang, das man nur minimalste Anpassungen am existierenden Quellcode vornehmen muss, um Spring vorteilhaft verwenden zu können.
Spring setzt im Kern auf Technologien wie Interfaces und Dependency Injection (DI), die sich ergänzen. Basierend auf Interfaces entsteht ein Geflecht einer entkoppelten Architektur der Applikation. Wenn zusätzlich Dependency Injection verwendet wird, so findet die Konfiguration der Abhängigkeiten außerhalb des Codes statt. So lässt sich dann mittels Dependency Injection die Code-Menge eines Interface-basierten Designs sehr stark reduzieren, was in Folge dessen eine enge Kopplung der Systemkomponenten verhindert. Spring agiert im Kontext von Dependency Injection als ein Container. Dieser stellt fertig konfigurierte Instanzen der Klassen einer Applikation mit all ihren Abhängigkeiten der Applikation bereit.

Bei Einsatz des Frameworks Spring können sich die folgenden Architekturvorteile ergeben:

  • Applikationen können ohne weiteren Aufwand Unit-Tests unterzogen werden.
  • Spring bietet ein konsistentes Framework für den Zugriff auf Daten an. Dazu können Java Database Connection (JDBC) oder aber ORM-Produkte wie Hibernate, Toplink oder Java Data Objects (JDO) eingesetzt werden.
  • Spring ist eine Alternative zu Enterprise JavaBeans (EJB) und verwendet Mechanismen der aspektorientierten Programmierung und bietet so ein deklaratives Transaktions-Management unter Verzicht auf einen EJB-Container an.
  • Spring bietet dem Entwickler einen definierten Rahmen auf allen Ebenen für seine Entwicklung an.
  • Business-Interfaces können als einfache Java-Klassen (POJOs, Plain Old Java Object) implementiert werden.
Der zentrale Gesichtspunkt von Spring ist es, die J2EE-Entwicklung einfacher gestalten zu können und dabei gute Programmierpraktiken zu unterstützen. Dazu gehört auch, dass Spring als Meta-Framework die Integration weiterer Frameworks zum Beispiel zur Persistenz unterstützt. Dabei ist Spring portabel über die Grenzen von Applikations-Servern hinaus. Der Hintergrund ist, dass Spring konsequent auf plattformspezifische und nicht-standardisierte Komponenten verzichtet.

Übersicht über die Spring-Module

Übersicht über die Spring-Module

Die Abbildung zeigt die Anordnung und Verteilung der Funktionalitäten und Features von Spring auf sieben verschiedene Module. Damit sind alle Funktionen zur Entwicklung von unternehmensweiten Applikationen abgedeckt. Dabei muss aber eine Applikation nicht komplett auf dem Spring-Framework basieren. Der Entwickler ist frei in der Wahl der Module und kann diejenigen wählen, die in seiner spezifischen Umgebung den meisten Nutzen bringen. Wie aus der Abbildung ersichtlich, ist das zentrale Modul der Spring Core - dieser stellt einen Container mit den grundlegenden Funktionen bereit. Dabei spricht man bei Spring von Beans und meint damit alle von Spring verwalteten Ressourcen. Zentrales Element jeder Spring-Applikation ist die BeanFactory - eine Implementierung des Entwurfsmusters (Pattern) Factory. Diese verwendet zur Trennung der Applikations-Konfiguration von der Spezifikation der Code-Abhängigkeiten das Prinzip Inversion of Control (IoC).

Spring Context Modul. Erweitert das Konzept der BeanFactory um Life-Cycle Ereignisse, Validierung, EJB-Integration, Remoting und Scheduling. Die BeanFactory realisiert den Container und das Context Modul setzt den Framework-spezifischen Teil um.

Spring AOP Modul. Unterstützt die aspektorientierte Programmierung (AOP) von eigenen Aspekten für Spring-basierte Applikationen. Auch ist die Metadaten-Programmierung in Spring dadurch möglich. Um die Interoperabilität mit anderen AOP-Frameworks umzusetzen, orientiert sich die Spring AOP-Realisierung weitestgehend an der von der AOP Alliance definierten Schnittstelle.

Spring DAO Modul. Das Modul abstrahiert die Java Database Connectivity (JDBC) Schnittstellen, so dass der eigentliche technische Code um beispielsweise Datenverbindungen aufzubauen, Statements, Ergebnisse oder Fehler zu behandeln, in die Klassen des Frameworks verlagert wird. Somit kann sich der Applikations-Code rein auf die Anwendung ausrichten. Um Transaktions-Management-Dienste für die Objekte einer Spring Applikation anbieten zu können, nutzt das DAO-Modul wiederum die Möglichkeiten des AOP-Moduls.

Spring ORM Modul. ORM steht dabei für objektrelationales Mapping - damit ist die Abbildung von Objekten auf relationale Datenbanken gemeint. Mit diesem Modul integriert Spring populäre ORM-Frameworks wie Hibernate, TopLink, JDO und iBATIS SQL Maps. Die Dienste des Transaktions-Managements sind aber auch in diesem Modul verfügbar.

Spring Web Modul. Stellt einen Context für die Realisierung von Web-basierten Applikationen zur Verfügung. Weiterhin integriert dieses Modul das Framework Struts.

Spring Web MVC Modul. Enthält ein vollständiges MVC-Framework für die Realisierung von Web-Applikationen und tritt damit in Wettbewerb zu anderen Web Application Frameworks. Der Unterschied ist jedoch, das Spring mit Model View Controller (MVC) bei gleichzeitiger Nutzung des Inversion of Control (IoC) Vorteile hinsichtlich der Flexibilität und Entkopplung von Komponenten gegenüber anderen Frameworks wie zum Beispiel Struts hat.

Das Spring-Framework ist in der Praxis häufig Teil der Entwicklung einer Applikation, weil es diesen großen Umfang von Funktionalität bereitstellt. Darüber hinaus werden insbesondere die Integration von Persistenz-Technologien und ein deklaratives Transaktions-Management unterstützt, so dass Spring auch für Datenbank-Applikationen Verwendung findet.

http://www.springframework.org

http://www.springframework.net/

http://www.springframework.org/documentation

http://www.springsource.org/osgi

http://www.springsource.org/

Informationen zum Artikel
Deutsch: Spring
Englisch: Spring, framework
Veröffentlicht: 31.03.2010
Wörter: 1260
Tags: #Java
Links: .NET, Anpassung, Apache, Apps, Architektur