Einführung in das Spring Framework

Grobe Übersicht üder den Spring Framework Container

Auf den folgenden Seiten dieser (Tutorial-) Serie sind kleine einfache Beispiele als Einführung in das Spring Framework dargestellt.

Das Spring Framework ist ein Open Source Java Framework, welches einfache Java Objekte, sogenannte Plain-Old-Java-Objects (POJO), als Spring Beans verwaltet. Dabei stellt das Spring Framework einen Inversion of Control (IoC) Container zu Verfügung, der per Dependency Injection (DI) abhängige Spring Beans miteinander verknüpft und konfiguriert. Durch diese Technik können Objektnetze aufgebaut werden.

Die wesentlichen Funktionen des Spring Frameworks sind …

  • Plain-Old-Java-Objects (POJO) basierendes Programmiermodell.
  • Verknüpfungen durch Dependency Injection (DI) über den Inversion-of-Control Container (IoC).
  • Querschnittthemen werden durch Aspect oriented Programming (AOP) bereitgestellt.

Die Spring Framework Projekte (Spring IO Platform)

Eine unvollständige Liste von zusätzlichen Themen bzw. Technologien, die vom Spring Framework (Spring IO Platform) unterstützt werden …

Die Basismodule des Spring Frameworks. Sie stellen den Inversion of Control (IoC) Container und die Funktionen für die Dependency Injection (DI) bereit.


Klassendiagramm dieses Beispiels

Spring an einem einfachem Beispiel
In diesem Beitrag werden die Grundlagen von Spring Framework wie die Definition von Spring Bean per XML Konfiguration und Annotationen, automatisches Dependency Injection (Autowired) und der Component scan vorgestellt.

Die Unterstützung der aspektorientierten Programmierung für das Spring Framework. Darunter befindet sich auch Unterstützung für AspectJ. Das Module spring-aspects bietet einige Implementierungen von Aspekten für querschnittliche Belange (Cross-Cutting Concerns) an.


Klassendiagramm dieses Beispiels

Spring mit AOP
In diesem Beitrag wird auf die aspektorientierte Programmierung unter dem Spring Framework mit Advices und Join Points eingegangen. Dazu kommt AspectJ und CGLIB zum Einsatz.

Dieses Module stellt die Spring Expression Language (SpEL) zu Verfügung.

Diese beiden Module führen weitere Technologien (Cache, JMX, JNDI, Remoting, Scheduling, Scripting, Validation, Mail) in die Spring-Welt ein, die aus Java EE bekannt sind.


Der Service der Fahrerverwaltung

Spring mit einer Webanwendung mit JPA und Validierung
In diesem Beitrag werden die Technologien der beiden vorherigen Beiträgen kombiniert und um die Validierung nach JSR 303 erweitert.


Spring Boot Webanwendung

Spring Boot Webanwendung: Die ersten Schritte (Tutorial)
In diesem Beitrag zeige ich ein Beispiel mit einer Spring Boot Webanwendung. Diese Webanwendung ist eine einfache und unvollständige Wertpapierverwaltung mit Datenbankzugriffen (JPA) auf Basis von Spring Boot.

Die Infrastruktur für lokale und globale (verteilte, XA) Transaktionen mit Unterstützung für DAO, JTA und JCA.


Klassendiagramm dieses Beispiels

Spring mit JPA und Hibernate
In diesem Beitrag werden die abstrakten und generischen Datenzugriffsobjekte für das Spring Framework und der Umgang mit JPA Entitäten gezeigt.


Der Service der Fahrerverwaltung

Spring mit einer Webanwendung mit JPA und Validierung
In diesem Beitrag werden die Technologien der beiden vorherigen Beiträgen kombiniert und um die Validierung nach JSR 303 erweitert.

Die Unterstützung von nativen SQL Datenbankzugriffen, Stored Procedures / Functions sowie User-defined Types (UDT) auf Basis des JDBC Standards.


Die Stored Procedure "searchPersons" mit User-defined Types (UDT)

Spring und Stored Procedures mit User-defined Types
In diesem Beitrag wird mit Spring JDBC auf eine Stored Procedures zugegriffen. Dabei werden benutzerdefinierte strukturierte Datentypen, sogenannte User-definied Types (UDT), verwendet. Diese komplexen SQL-Typen sind mit der Version 2.1 zum JDBC Standard hinzugekommen.

Die zugehörigen Beispiele:

  1. Stored Procedure mit User-defined Types unter PostgreSQL
    In diesem Beitrag möchte ich zeigen, wie eine Stored Procedure mit User-defined Types (UDT) in einer PostgreSQL Datenbank programmiert wird. Im übergeordneten Beitrag Spring und Stored Procedure mit User-defined Types wird das Aufrufen dieser Stored Procedure aus Java heraus gezeigt.
  2. Stored Procedure mit User-defined Types unter Oracle
    In diesem Beitrag möchte ich zeigen, wie eine Stored Procedure mit User-defined Types (UDT) in einer Oracle Database programmiert wird. Im übergeordneten Beitrag Spring und Stored Procedure mit User-defined Types wird das Aufrufen dieser Stored Procedure aus Java heraus gezeigt.

O/R (Object/Relational) Mapper mit direkte Unterstützung für Hibernate, JPA, JDO und iBatis.


Klassendiagramm dieses Beispiels

Spring mit JPA und Hibernate
In diesem Beitrag werden die abstrakten und generischen Datenzugriffsobjekte für das Spring Framework und der Umgang mit JPA Entitäten gezeigt.


Der Service der Fahrerverwaltung

Spring mit einer Webanwendung mit JPA und Validierung
In diesem Beitrag werden die Technologien der beiden vorherigen Beiträgen kombiniert und um die Validierung nach JSR 303 erweitert.

O/X (Object/XML) Mapper mit direkte Unterstützung für JAXB, JIBX, Castor XML, MIME, …

Dieses Module bietet ähnlichen Support, für den Zugriff auf ein LDAP-System, wie das JDBCTemplate.

Diese Module bieten Unterstützung für Kommunikationen über TCP, Simple Message Protocol, STOMP und die asynchrone Kommunikation über Queues (JMS, AMQP).

Das MVC Framework für Spring mit der Möglichkeit dynamische und REST-konforme Webanwendungen auf Basis der Servlet API umsetzen zu können. Dazu wird das MVC-Pattern und eine Reihe von View Technologien (Thymeleaf, JSP, JSTL, Feed, Freemarker, JSON, Tiles, Velocity, XML, XSLT, …) implementiert. Zusätzlich werden allgemeine Web-Technologien (HTTP, Servlet, WebSockets, CORS, …) zu Verfügung gestellt.


Die ApplicationContexte einer einfachen Spring Webanwendung

Spring mit einer einfachen Webanwendung
In diesem Beitrag wird das Spring MVC mit Masken (Views) und Steuerung (Controller) vorgestellt. Als View Technologien kommt JSP zum Einsatz.


Der Service der Fahrerverwaltung

Spring mit einer Webanwendung mit JPA und Validierung
In diesem Beitrag werden die Technologien der beiden vorherigen Beiträgen kombiniert und um die Validierung nach JSR 303 erweitert.


Die Anmeldemaske der Webanwendung

Spring Security mit einer Webanwendung
In diesem Beitrag wird die Webanwendung aus dem vorherigen Beitrag abgesichert. Dazu wird mit Spring Security eine Autorisierung (Berechtigung) von Services per Annotation vorgeführt. Die Authentifizierung (Anmeldung) per Kommandozeile und per Webseite (Login-Formular) durchgeführt.


Die REST-API des Webservice der Fahrerverwaltung

Spring mit RESTful Webservice
In diesem Beitrag wird das Erstellen und Testen eines RESTful Webservices beschrieben. Dazu wird ein XML-Schemas mit JAXB definiert und das Serialisieren von Entitäten nach JSON und XML erläutert.


Spring Boot Webanwendung

Spring Boot Webanwendung: Die ersten Schritte (Tutorial)
In diesem Beitrag zeige ich ein Beispiel mit einer Spring Boot Webanwendung. Diese Webanwendung ist eine einfache und unvollständige Wertpapierverwaltung mit Datenbankzugriffen (JPA) auf Basis von Spring Boot.

Dieses Module erweitert die Möglichkeiten von Spring MVC, um die Abbildung einer Abfolge von Webseiten (Page Flow).

Mit diesem Module können nach dem Contract-First Ansatz Webservice auf Basis von SOAP erstellt werden.

Das Testing und Mocking Framework für das Spring Framework auf Basis von JUnit.


In allen Beiträgen finden Sie Beispiele für JUnit Tests.

Mit diesem Module können Self-Contained Anwendungen erstellt werden. Diese Art von Anwendungen werden in einem einzelnen JAR ausgeliefert und per Kommandozeile gestartet $ java -jar <jar-file>. Zusätzlich werden die Abhängigkeiten aller benötigten Bibliotheken durch Spring Boot verwaltet.


Spring Boot Webanwendung: Die ersten Schritte (Tutorial)
In diesem Beitrag zeige ich ein Beispiel mit einer Spring Boot Webanwendung. Diese Webanwendung ist eine einfache und unvollständige Wertpapierverwaltung mit Datenbankzugriffen (JPA) auf Basis von Spring Boot.

Ist ein Online-Dienst für das Erstellen eines Gradle- oder Maven-Projektes für Spring Boot. In einem Wizard kann das Projekt komfortabel zusammengestellt werden.



Spring Boot Webanwendung

Spring Boot Webanwendung: Die ersten Schritte (Tutorial)
In diesem Beitrag zeige ich ein Beispiel mit einer Spring Boot Webanwendung. Diese Webanwendung ist eine einfache und unvollständige Wertpapierverwaltung mit Datenbankzugriffen (JPA) auf Basis von Spring Boot.

Bietet Zugriff auf die verschiedensten relationalen (JPA) und NoSQL-Datenbanken (KeyValue, Pivotal GemFire, MongoDB, Apache Solr, …) für das Spring Framework.


Spring Boot Webanwendung

Spring Boot Webanwendung: Die ersten Schritte (Tutorial)
In diesem Beitrag zeige ich ein Beispiel mit einer Spring Boot Webanwendung. Diese Webanwendung ist eine einfache und unvollständige Wertpapierverwaltung mit Datenbankzugriffen (JPA) auf Basis von Spring Boot.

Bietet Tracing in einem verteilten System. Dazu wird bei Spring Cloud Sleuth wird eine traceId (Correlation-ID) und eine spanId vergeben. Die Correlation-ID wird in allen Logdateien geschrieben – so kann dann der Aufruf über mehrere verteilte Systeme verfolgt werden. Diese ID wird im HTTP-Header mit dem Name X-B3-TraceId abgelegt. B3 steht hier für BigBrotherBird.

Bietet die Authentifizierung und die Autorisierung für Java- und Webanwendungen mit dem Spring Framework.


Die Anmeldemaske der Webanwendung

Spring Security mit einer Webanwendung
In diesem Beitrag wird die Webanwendung aus dem vorherigen Beitrag abgesichert. Dazu wird mit Spring Security eine Autorisierung (Berechtigung) von Services per Annotation vorgeführt. Die Authentifizierung (Anmeldung) per Kommandozeile und per Webseite (Login-Formular) durchgeführt.

Die Infrastruktur für die Paket- bzw. Stapelverarbeitungen in Java mit Wiederanlauffähigkeit, Optimierungen für Transaktionen und Logging, allerdings ohne das Scheduling von Jobs.

Bietet einfache Abstraktionen bzw. Implementationen der Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (*) für das Spring Framework.

Dieses Module stellt Spring Connectors für die APIs der bedeutesten Social Medien Anbieter bereit.

Spring Tools Suite ist ein Eclipse Plugin. Spring IDE ist ein Eclipse Plugin. Es stellt Funktionen für die Spring IO Platform bereit. Zusätzlich sind in diesem Plugin Editoren, Views, Validatoren, usw. enthalten.

Informationen zur Implementierung bzw. zu den Requirements

Alle Beispiele wurden mit folgenden Frameworks bzw. Werkzeugen erstellt:

Die genauen Versionen bitte der pom.xml der einzelnen Projekte entnehmen.

Alle alten Eclipse Projekte haben folgende Verzeichnisstruktur (Source-Folder):

  • src/java für den produktiven Java Sourcecode
  • src/test für den Sourcecode der Testfälle
  • src/web für die Ressourcen der Webanwendung (Bilder, Javascript, JSP, HTML, usw.)

Alle neueren Eclipse Projekte haben folgende Verzeichnisstruktur (Source-Folder), die der Vorgabe von Apache Maven entspricht:

  • src/main/java für den produktiven Java Sourcecode
  • src/main/test für den Sourcecode der Testfälle
  • src/main/resources/templates für die dynamischen Ressourcen der Webanwendung (HTML5)
  • src/main/resources/static für die statischen Ressourcen der Webanwendung (Bilder, JavaScript, CSS)

Die Beiträge dieser Serie

Klassendiagramm dieses Beispiels

Spring an einem einfachem Beispiel
In diesem Beitrag werden die Grundlagen von Spring Framework wie die Definition von Spring Bean per XML Konfiguration und Annotationen, automatisches Dependency Injection (Autowired) und der Component scan vorgestellt.

Klassendiagramm dieses Beispiels

Spring mit AOP
In diesem Beitrag wird auf die aspektorientierte Programmierung unter dem Spring Framework mit Advices und Join Points eingegangen. Dazu kommt AspectJ und CGLIB zum Einsatz.

Klassendiagramm dieses Beispiels

Spring mit JPA und Hibernate
In diesem Beitrag werden die abstrakten und generischen Datenzugriffsobjekte für das Spring Framework und der Umgang mit JPA Entitäten gezeigt.

Die ApplicationContexte einer einfachen Spring Webanwendung

Spring mit einer einfachen Webanwendung
In diesem Beitrag wird das Spring MVC mit Masken (Views) und Steuerung (Controller) vorgestellt. Als View Technologien kommt JSP zum Einsatz.

Der Service der Fahrerverwaltung

Spring mit einer Webanwendung mit JPA und Validierung
In diesem Beitrag werden die Technologien der beiden vorherigen Beiträgen kombiniert und um die Validierung nach JSR 303 erweitert.

Die Anmeldemaske der Webanwendung

Spring Security mit einer Webanwendung
In diesem Beitrag wird die Webanwendung aus dem vorherigen Beitrag abgesichert. Dazu wird mit Spring Security eine Autorisierung (Berechtigung) von Services per Annotation vorgeführt. Die Authentifizierung (Anmeldung) per Kommandozeile und per Webseite (Login-Formular) durchgeführt.

Die REST-API des Webservice der Fahrerverwaltung

Spring mit RESTful Webservice
In diesem Beitrag wird das Erstellen und Testen eines RESTful Webservices beschrieben. Dazu wird ein XML-Schemas mit JAXB definiert und das Serialisieren von Entitäten nach JSON und XML erläutert.

Die Stored Procedure "searchPersons" mit User-defined Types (UDT)

Spring und Stored Procedures mit User-defined Types
In diesem Beitrag wird mit Spring JDBC auf eine Stored Procedures zugegriffen. Dabei werden benutzerdefinierte strukturierte Datentypen, sogenannte User-definied Types (UDT), verwendet. Diese komplexen SQL-Typen sind mit der Version 2.1 zum JDBC Standard hinzugekommen.

Die zugehörigen Beispiele:

  1. Stored Procedure mit User-defined Types unter PostgreSQL
    In diesem Beitrag möchte ich zeigen, wie eine Stored Procedure mit User-defined Types (UDT) in einer PostgreSQL Datenbank programmiert wird. Im übergeordneten Beitrag Spring und Stored Procedure mit User-defined Types wird das Aufrufen dieser Stored Procedure aus Java heraus gezeigt.
  2. Stored Procedure mit User-defined Types unter Oracle
    In diesem Beitrag möchte ich zeigen, wie eine Stored Procedure mit User-defined Types (UDT) in einer Oracle Database programmiert wird. Im übergeordneten Beitrag Spring und Stored Procedure mit User-defined Types wird das Aufrufen dieser Stored Procedure aus Java heraus gezeigt.
Spring Boot Webanwendung

Spring Boot Webanwendung: Die ersten Schritte (Tutorial)
In diesem Beitrag zeige ich ein Beispiel mit einer Spring Boot Webanwendung. Diese Webanwendung ist eine einfache und unvollständige Wertpapierverwaltung mit Datenbankzugriffen (JPA) auf Basis von Spring Boot.

Die Literaturempfehlungen

Es wurden folgende Änderungen an allen Projekten vorgenommen.

  1. Die Projekte wurden aus meinem lokalen Apache Subversion Repository in meine öffentlichen GitHub Repositories verschoben.
  2. Die folgenden typischen Anpassungen an Git wurden an allen Projekten durchgeführt.
    • .directory gelöscht
    • .gitignore hinzugefügt
    • README.md hinzugefügt
    • COPYRIGHT.md hinzugefügt
    • In jedem Repository wurde für jeden Beitrag der Serie ein Branch angelegt.
      • develop-spring-an-einem-einfachen-beispiel
      • develop-spring-mit-aop
      • develop-spring-mit-jpa-und-hibernate
      • develop-spring-mit-einer-einfachen-webanwendung
      • develop-spring-mit-einer-webanwendung-mit-jpa-und-validierung
      • develop-spring-security-mit-einer-webanwendung
      • develop-spring-mit-restful-webservice

Es wurden folgende Änderungen an allen Projekten vorgenommen.

  1. Aktualisierung des OpenJDK auf die Version 1.7.0.
  2. Aktualisierung der Entwicklungsumgebung Eclipse auf die Version 4.2.1.
    Die benötigten Plugins aus dem Eclipse Marketplace:

  3. Aktualisierung der Datei pom.xml:
    • Anpassungen an die OpenJDK Version
    • GitHub Einträge (SCM und URL) hinzugefügt
    • Aktualisierung der Libraries auf aktuellerer Versionen (z. B. Spring Version 3.1.2.RELEASE, Hibernate Version 4.1.7.Final, JUnit Version 4.10, mockito Version 1.9.0, …)
      Die genaueren Versionen bitte aus den jeweiligen pom.xml auf GitHub entnehmen.
Frank Rahn
Letzte Artikel von Frank Rahn (Alle anzeigen)
6 Kommentare
  1. Hans-Christian Mai
    Hans-Christian Mai sagte:

    Hallo Herr Rahn,
    tolle Seite. Auch wenn sich seid 2012 einiges getan hat, finde ich die Darstellung gelungen. Wird es eine Aktualisierung geben?
    Mit freundlichem Gruß
    Hans-Christian Mai

    Antworten
  2. Michael K.
    Michael K. sagte:

    Sehr geehrter Herr Rahn,

    zunächst einmal möchte ich mich bei Ihnen für die äußerst guten Spring-Beispiele bedanken! Ich war schon lange auf der Suche nach vollständigen und nicht fehlerhaften Beispielen mit JPA/Hibernate + Maven 😉

    Auf Ihrer Seite habe ich diese nun endlich gefunden!

    Ich hätte noch zwei kleine Fragen an Sie und würde mich sehr freuen, wenn Sie sich für diese Zeit nehmen könnten!

    @REST: Realisieren Sie dies mittels Spring oder verwenden Sie ein anderes Framework wie z.B. Jersey? Ich habe die Erfahrung gemacht, dass hierfür Spring ungeeignet ist, da man nicht alle HTTP-Methoden nutzen kann und bevorzuge somit Jersey.

    Haben Sie evtl. noch vor ein kleines Beispiel online zu stellen? Ich würde mich sehr freuen!

    @Controller vs. @Service: Ich kann diese beiden Begriffe schwer abgrenzen bzw. sehe die Unterschiede nicht. Könnten Sie mir die Begriffe anhand eines Beispiels helfen abzugrenzen?

    Über eine Antwort würde ich mich freuen!

    Vielen Dank und viele Grüße
    Michael K.

    Antworten
    • Frank Rahn
      Frank Rahn sagte:

      Sehr geehrter Herr Michael K.,

      vielen Dank, das ihnen meine Seite gefällt.

      Zu: @REST
      Ich verwende im beruflichen Umfeld häufig Apache CXF. Dieses Framework ist zwar Hauptsächlich ein Webservice (JAX-WS) Framework hat aber auch eine gute JAX-RS Unterstützung und basiert auf Spring.

      Allerdings verwende ich dieses Framework beim Kunden immer mit dem Gedanken es auch für JAX-WS einzusetzen, was bisher auch immer genutzt werden musste (irgendein Webservice gibt es immer 🙂 ).

      Was spricht gegen Spring? In der Enum RequestMethod werden zu mindestens alle HTTP-Methoden angeboten.

      Hm ein Beispiel … mal sehen 😯

      Zu: @Controller vs. @Service
      Zunächst sind die Annotationen <@Controller, @Service und @Repository alle eine bestimmte Form der Annotation @Component. Mit dieser Annotation werden grundsätzlich Spring Beans definiert, die durch einen Component-Scan (<context:component-scan base-package="de.rahn..." />) erzeugt werden. Durch die erweiterten Formen der @Component werden zusätzlichen Funktionalitäten aktiviert:

      • @Repository
        Diese Annotation ermöglicht es die Verwendung der @PersistenceUnit bzw. @PersistenceContext. Zusätzlich können Exception aus DB Subsystem (z. B. JPA) in die Spring-spezifischen DataAccessException übersetzt werden.
        Repository ist ein Begriff aus dem Domain-Driven Design: Tackling Complexity in the Heart of Software(*) von Eric J. Evans und abstrahieren die Persistierung von den Entities.
      • @Controller
        Diese Annotation kennzeichnet Spring Beans, die vom DispatcherServlet angesprochen werden. Der Name leitet sich aus dem MVC-Pattern ab. An diesen Beans werden die Request/Response-Bindings berücksichtigt (z. B. @RequestMapping).
      • @Service
        Diese Annoation kennzeichnet ein Spring Bean als Business Service Facade (Core J2ee Patterns: Best Practices and Design Strategies(*)). Also eine Schnittstelle zu einem fachlichen Subsystem oder auch Komponente. Auch dieser Begriff stammt aus dem Domain-Driven Design: Tackling Complexity in the Heart of Software(*) von Eric J. Evans. Diese Spring Beans sind typischerweise Zustandslos.

      Diese Annotationen sind eher zum Markieren von Spring Beans gedacht, als das wirkliche Funktionalität dahinter liegt.

      Ich hoffe Ihnen damit geholfen zu haben.

      Mit freundlichen Grüßen / Best regards
         Frank W. Rahn

      Antworten

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Ihre E-Mail-Adresse wird nicht veröffentlicht. Ihr Kommentar wird verschlüsselt an meinen Server gesendet. Erforderliche Felder sind mit * markiert.

Weitere Informationen und Widerrufshinweise finden Sie in meiner Datenschutzerklärung.