Spring (Framework)

aus Wikipedia, der freien Enzyklopädie
Wechseln zu: Navigation, Suche
Spring
Logo von Spring
Maintainer SpringSource
Aktuelle Version 4.0.3 [1]
(27. März 2014)
Aktuelle Vorabversion 4.0.4 Snapshot
Betriebssystem plattformunabhängig
Programmier­sprache Java
Kategorie Framework
Lizenz Apache-Lizenz
springsource.org

Das Spring Framework (kurz Spring) ist ein quelloffenes Framework für die Java-Plattform. Ziel des Spring Frameworks ist es, die Entwicklung mit Java/Java EE zu vereinfachen und gute Programmierpraktiken zu fördern. Spring bietet mit einem breiten Spektrum an Funktionalität eine ganzheitliche Lösung zur Entwicklung von Anwendungen und deren Geschäftslogiken; dabei steht die Entkopplung der Applikationskomponenten im Vordergrund.

Eigenschaften[Bearbeiten]

Das Framework basiert auf den in Rod Johnsons Buch Expert One-On-One J2EE Design and Development[2] vorgestellten Prinzipien:

  • Dependency Injection: Den Objekten werden die benötigten Ressourcen und Objekte zugewiesen. Sie müssen sie nicht selbst suchen.
  • Aspektorientierte Programmierung (AOP): Dadurch kann der Programmierer vor allem technische Aspekte wie Transaktionen oder Sicherheit isolieren und den eigentlichen Programmcode davon frei halten. Spring bringt dabei neben Spring AOP eine gute Unterstützung für AspectJ und dessen Pointcut Expression Language mit.
  • Vorlagen dienen dazu, die Arbeit mit einigen Programmierschnittstellen (APIs) zu vereinfachen, indem Ressourcen automatisch aufgeräumt sowie Fehlersituationen einheitlich behandelt werden.

Dadurch wird ein POJO-basiertes Programmiermodell möglich, bei dem die POJOs zusätzlich in verschiedenen Umgebungen (auf einem Server oder in einer Client-Anwendung) lauffähig sind.

Erweiterungen[Bearbeiten]

Auf Basis des Spring-Frameworks existieren weitere Projekte, welche innerhalb des Spring-Projektes entwickelt werden:

Spring .NET
ist die Portierung des Spring-Framework auf der .NET-Plattform.
Spring Boot
für die einfache Entwicklung eigenständig lauffähiger Spring-Anwendungen per Konvention vor Konfiguration, die ohne XML-Konfiguration auskommen und alle nötigen Klassenbibliotheken mitbringen.
Spring AMQP
für den Zugriff auf AMQP-basierte Message Oriented Middleware
Spring Batch
für die Abbildung von Batch-Prozessen auf der Java-Plattform.
Spring BeanDoc
für die Erstellung von Dokumentationen zu den Spring-Frameworkkonfigurationen.
Spring Data
für den Zugriff auf verschiedene relationale und NoSQL Datenbanken
Spring Dynamic Modules for OSGi Service Platforms
für die Implementierung von Spring-Anwendungen auf Basis des OSGi-Frameworks.
Spring Extensions (Modules)
zur Anbindung von weiteren Frameworks, welche nicht im Spring-Framework selbst enthalten sind.
Spring IDE
für die Entwicklerunterstützung in der Erstellung und Wartung von Spring-Anwendungen.
Spring Integration
für die Implementierung von Integrationslogik mit einem Spring-konformen Programmierparadigma.
Spring BlazeDS Integration
ist die Open Source-Lösung zur Erstellung von Spring-unterstützten RIA-Anwendungen mit Adobe Flex.
Spring LDAP
für den einfacheren Zugriff auf LDAP-Systeme.
Spring MVC
für die Erstellung von Webanwendungen.
Spring Rich Client
zur Erstellung von Rich Client-Anwendungen auf Basis des Spring-Frameworks.
Spring Roo
zur raschen Generierung von Spring-basierten Enterpriseanwendungen.
Spring Security
(ehemals Spring Acegi) zur Absicherung von Java-Anwendungen und Webseiten.
Spring Social
bietet eine Vereinfachung für den Zugriff auf verschiedene Social Networks.
Spring Web Flow
für die Implementierung von Abläufen auf einer Webseite.
Spring Web Services
zur Erstellung von Contract-First Webservices.
ColdSpring ColdFusion
ist die Portierung des Spring-Frameworks auf die ColdFusion-Plattform.
Spring for Android
ist eine Erweiterung, die das Erstellen von nativen Android Apps erleichtern soll.

Das mittlerweile nicht mehr fortgeführte Open-Source-Projekt Spring Modules bietet darüber hinaus eine Reihe von Tools und Erweiterungen für Spring, darunter z. B. Integration mit Ant, Flux, HiveMind, Lucene, Apache OJB, Tapestry, Unterstützung für Caching Services, db4o, Rules Engines, diversen Jakarta-Commons-Komponenten, JavaSpaces, jBPM, Erweiterungen für Spring MVC und Bean-Validierung.[3]

Vergleich[Bearbeiten]

Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung.

Spring konkurriert direkt mit anderen Dependency-Injection-Frameworks wie PicoContainer oder Google Guice, bietet aber auf Grund seiner Unterstützung für Aspektorientierte Programmierung und Vereinfachung bestehender Programmierschnittstellen mehr als diese.

Im Vergleich zu Enterprise Java Beans 3.0, das auch POJO-basierend ist und Dependency Injection unterstützt, gibt es folgende Unterschiede:

  • EJB 3.0 unterstützt Dependency Injection nur für JNDI-Objekte beziehungsweise komplexe Service-Objekte, Spring dagegen für alle Objekte – auch für POJOs untereinander.
  • Springs Dependency Injection Modell ist wesentlich flexibler. Es bietet verschiedene Möglichkeiten, um in den Dependency Injection Prozess einzugreifen und unterstützt eine Vielzahl an unterschiedlichen Programmier- und Konfigurationsmöglichkeiten.
  • EJB 3.0 unterstützt die Interceptoren aus der aspektorientierten Programmierung nur für Beans. Mit dem Spring-AOP-Framework ist es dagegen schon immer möglich, applikationsspezifische Interceptoren zu jedem Objekt zu integrieren.
  • Spring ermöglicht mit Spring Security Zugriffskontrolle auf Instanzebene, die Zugriffskontrolle unter EJB 3.0 ist dagegen rollenbasiert, unterschiedliche Zugriffsberechtigungen von Nutzern gleicher Rollen sind damit nicht realisierbar.

Gleichzeitig unterstützt Spring viele der Annotationen von EJB 3.0, so dass ein ähnliches Programmiermodell möglich ist.

Geschichte[Bearbeiten]

Rod Johnson stellte die Ideen zu Spring erstmals in seinem Buch Expert One-On-One J2EE Design and Development[2] (2002) vor und stellte Quelltext als Begleitmaterial bereit. Im Februar 2003 wurde der Quellcode erstmals auf SourceForge als quelloffenes Projekt bereitgestellt und erhielt zu diesem Zeitpunkt den Namen Spring-Framework. Im Juni 2003 erschien die erste Freigabe in der Version 0.9 unter der Apache 2.0 Lizenz. Die offizielle 1.0-Freigabe von Spring wurde im März 2004 veröffentlicht. Seit dieser Zeit fand das Spring-Framework in wenigen Jahren weite Verbreitung und wird bereits in einer Vielzahl von Anwendungen eingesetzt.

Im September 2004 wurde die Version 1.1 mit Fehlerbehebungen und zahlreichen neuen Funktionen veröffentlicht. Die im Mai 2005 veröffentlichte Version 1.2 unterstützte bereits einige Java-5-Funktionalitäten bei gleichzeitiger Abwärtskompatibilität zu älteren Java-Versionen. Im Dezember 2005 wurde von den Spring-Entwicklern die Version 2.0 angekündigt, welche dann eine Menge neuer Funktionen mit sich brachte und im Oktober 2006 veröffentlicht wurde.

Bis zur Veröffentlichung der Version 2.0 war das Spring-Framework bereits eine Million mal heruntergeladen worden und gewann im Jahr 2006 einen JAX Innovation Award und einen Jolt productivity award.[4][5]

Am 19. November 2007 wurde die Version 2.5 veröffentlicht. Ursprünglich war die Entwicklung als Version 2.1 vorgesehen, aber auf Grund der vielen neuen Funktionen wurde stattdessen die Version 2.5 Nachfolger für die Version 2.0.x. Spring 2.5 unterstützt vollständig die Java-6-Version sowie die Java EE in der Version 5 bei gleichzeitiger Abwärtskompatibilität zu Java 1.4 sowie Java EE 1.3. Außerdem werden in Spring 2.5 Annotations für die Konfiguration der Anwendungskomponenten unterstützt.

Im September 2009 wurde Springsource von VMware übernommen.

Aktuell ist die Version 3.x, Version 3.0 erschien am 16. Dezember 2009[6]. Neu integriert wurden darin unter anderem eine Expression Language u. a. für die Konfiguration der Spring Beans und eine Unterstützung für REST. Außerdem wurde die Java-basierte Konfiguration aus dem Spring Java Config-Projekt in Spring 3.0 integriert. Zurzeit wird an der Version 3.3 entwickelt. Wesentliche Neuerungen sind die portable Cache-Abstraktion und die Unterstützung von Konfigurationsprofilen, bei denen abhängig von der Umgebung unterschiedliche Spring-Beans erzeugt werden. Außerdem werden Web Conversations eingeführt, mit denen Zustand verwaltet werden kann, der über mehrere Web-Seiten zur Verfügung stehen muss.

Das Spring-Framework wird nach wie vor durch die Spring-Kernentwickler, unter anderem Jürgen Höller, Rod Johnson und Rob Harrop, weiterentwickelt. Die Firma SpringSource-Division von VMware, ehemals Interface21, beschäftigt die meisten aktiven Entwickler des Projektes und bietet u. A. Beratung, Training und Unterstützung zu Spring.

Spring Dynamic Modules for the OSGi Platform (früher Spring-OSGi)[Bearbeiten]

Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionseite, unter "Spring DM gibts nicht mehr", angegeben. Hilf mit, ihn zu verbessern, und entferne anschließend diese Markierung.

Spring Dynamic Modules agiert als Brücke zwischen dem Spring-Framework und OSGi. Anwendungen auf Basis des Spring-Frameworks können hierdurch mit OSGi implementiert werden. Grundidee ist die Bereitstellung von Spring in Form von Bundles. Dabei sollen die dynamischen Merkmale von OSGi genutzt werden.

Jedes Bundle besitzt seinen eigenen Application-Context. Spring-Beans können als OSGi-Services angeboten, OSGi-Services als Spring-Beans konsumiert werden. Services können dynamisch installiert und deinstalliert werden. Die derzeitige Freigabe ist Spring Dynamic Modules 1.1.2, das am 3. Oktober 2008 veröffentlicht wurde.

SpringSource dm Server[Bearbeiten]

Die Nutzung von OSGi für Enterprise-Anwendungen führt zu einigen Problemen, da OSGi das Laden der Klassen anders handhabt. Das kann zu Inkompatibilitäten und auch komplexeren Problemen führen, da zum Beispiel ein O/R-Mapper wie Hibernate den Code der persistenten Objekte modifizieren können muss. Der SpringSource dm Server bietet Lösungen für diese Probleme an und erleichtert außerdem die Nutzung von Spring. Er basiert auf Apache Tomcat für die Unterstützung von Web-Anwendungen und Equinox als OSGi-Implementierung. Der SpringSource dm Server ist ein quelloffenes Projekt nach GNU General Public License (GPL). Mittlerweile sind die Quellen Basis für das Eclipse Virgo Projekt, das nach der Eclipse Public License lizenziert ist.

Siehe auch[Bearbeiten]

Literatur[Bearbeiten]

  • Thomas Biskup, Sven Helmberger, Holger Spielmann, Rafael Stalitza, Sascha Steiger, Nils Wloka: Spring Praxishandbuch: Integration und Testing. EntwicklerPress, 2008, ISBN 978-3-939084-39-6.
  • Thomas Biskup, Rafael Stalitza, Sascha Steiger, Nils Wloka: Spring Praxishandbuch: Band 2: Dynamisierung, Verteilung und Sicherheit. EntwicklerPress, 2009, ISBN 978-3-86802-022-9.
  • Rod Johnson, Jürgen Höller, Alef Arendsen, Thomas Risberg, Colin Sampaleanu: Professional Java Development with the Spring-Framework. Wiley, 2005, ISBN 0-7645-7483-3.
  • Jan Machacek, Aleksa Vukotic, Anirvan Chakraborty: Pro Spring 2.5. APress, 2005, ISBN 1-59059-921-7.
  • Richard Oates, Thomas Langer, Stefan Wille, Torsten Lueckow, Gerald Bachlmayr: Spring & Hibernate. Eine praxisbezogene Einführung, Hanser Verlag, 2006, ISBN 978-3-446-40457-1.
  • Craig Walls: Spring im Einsatz. Carl Hanser Verlag, München 2008, ISBN 978-3-446-41240-8.
  • Craig Walls: Spring in Action (3rd Edition). Manning-Verlag, New York 2011, ISBN 978-1-935-18235-1
  • Eberhard Wolff: Spring 3 – Framework für die Java Entwicklung. dpunkt, 2010 (3., erweiterte Auflage), ISBN 3-89864-572-X. http://spring-buch.de
  • Alfred Zeitner, Birgit Linner, Martin Maier, Thorsten Göckeler: Spring 2.5: Eine pragmatische Einführung. Addison-Wesley, 2008, ISBN 978-3-8273-2622-5.

Weblinks[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. [1]
  2. a b "Expert One-On-One J2EE Design and Development“, wrox Press, Oktober 2002, ISBN 0-7645-4385-7.
  3. Spring Modules Features. An seine Stelle treten verschiedene Spring Extension-Projekte.
  4. JAX Innovation Award Gewinner 2006
  5. Jolt winners 2006
  6. SpringSource Blog, Spring Framework 3.0 goes GA