Einführung in das Spring Framework
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 …
Spring Beans und Spring Core
Die Basismodule des Spring Frameworks. Sie stellen den Inversion of Control (IoC) Container und die Funktionen für die Dependency Injection (DI) bereit.
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.
Spring AOP und Spring Aspects (AspectJ)
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.
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.
Spring Expression Language (SpEL)
Dieses Module stellt die Spring Expression Language (SpEL) zu Verfügung.
Spring Context und Spring Context Support
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.
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: 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.
Spring TX (Transactions)
Die Infrastruktur für lokale und globale (verteilte, XA) Transaktionen mit Unterstützung für DAO, JTA und JCA.
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.
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 JDBC
Die Unterstützung von nativen SQL Datenbankzugriffen, Stored Procedures / Functions sowie User-defined Types (UDT) auf Basis des JDBC Standards.
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:
- 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. - 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 ORM (Object-Relational Mapping)
O/R (Object/Relational) Mapper mit direkte Unterstützung für Hibernate, JPA, JDO und iBatis.
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.
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 OXM (Object-XML Mapping)
O/X (Object/XML) Mapper mit direkte Unterstützung für JAXB, JIBX, Castor XML, MIME, …
Spring LDAP
Dieses Module bietet ähnlichen Support, für den Zugriff auf ein LDAP-System, wie das JDBCTemplate
.
Spring Web, Spring WebSocket, Spring Web MVC (Model View Controller) und Spring WebFlux
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.
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.
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 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.
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: 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.
Spring Web Flow
Dieses Module erweitert die Möglichkeiten von Spring MVC, um die Abbildung einer Abfolge von Webseiten (Page Flow).
Spring WS (Web Services)
Mit diesem Module können nach dem Contract-First Ansatz Webservice auf Basis von SOAP erstellt werden.
Spring Test
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.
Spring Boot
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.
Spring Initializr
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: 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.
Spring Data
Bietet Zugriff auf die verschiedensten relationalen (JPA) und NoSQL-Datenbanken (KeyValue, Pivotal GemFire, MongoDB, Apache Solr, …) für das Spring Framework.
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.
Spring Cloud Sleuth
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.
Spring Security
Bietet die Authentifizierung und die Autorisierung für Java- und Webanwendungen mit dem Spring Framework.
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.
Spring Batch
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.
Spring Integration
Bietet einfache Abstraktionen bzw. Implementationen der Enterprise Integration Patterns: Designing, Building, and Deploying Messaging Solutions (*) für das Spring Framework.
Spring Social
Dieses Module stellt Spring Connectors für die APIs der bedeutesten Social Medien Anbieter bereit.
Spring Tools Suite 4 (STS) ehemals Spring IDE (Integrated Development Environment)
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 Sourcecodesrc/test
für den Sourcecode der Testfällesrc/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 Sourcecodesrc/main/test
für den Sourcecode der Testfällesrc/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
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.
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.
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.
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.
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 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.
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 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:
- 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. - 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: 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
- Referenzdokumentation Spring Framework
- Spring 3: Framework für die Java-Entwicklung (*)
- Pro Spring Boot (*)
- Spring Boot in Action (*)
- Domain-Driven Design: Tackling Complexity in the Heart of Software (*) von Eric J. Evans
- Core J2ee Patterns: Best Practices and Design Strategies (*)
1tes Update
Es wurden folgende Änderungen an allen Projekten vorgenommen.
- Die Projekte wurden aus meinem lokalen Apache Subversion Repository in meine öffentlichen GitHub Repositories verschoben.
- Projekt test-spring-simple
- Projekt test-spring-jpa
- Projekt test-spring-web
- Die folgenden typischen Anpassungen an Git wurden an allen Projekten durchgeführt.
.directory
gelöscht.gitignore
hinzugefügtREADME.md
hinzugefügtCOPYRIGHT.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
2tes Update
Es wurden folgende Änderungen an allen Projekten vorgenommen.
- Aktualisierung des OpenJDK auf die Version 1.7.0.
- Aktualisierung der Entwicklungsumgebung Eclipse auf die Version 4.2.1.
Die benötigten Plugins aus dem Eclipse Marketplace: - 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 jeweiligenpom.xml
auf GitHub entnehmen.
- Wer ist der optimale Java Bean Mapper? - Freitag, 22. September 2023
- Spring Boot Webanwendung: Die ersten Schritte (Tutorial) - Montag, 28. März 2016
- Mainframe-Zugriff via Java - Sonntag, 04. Mai 2014
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
Hallo Herr Mai,
vielen Dank. Wie genau meinen Sie dass mit der Aktualisierung?
Seit dem Erscheinungsjahr dieser Seite sind ja einige Beiträge hinzugekommen.
Viele Grüße
Frank Rahn
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.
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-spezifischenDataAccessException
ü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
Guten Tag,
vielen Dank für Ihre Antwort! Die RequestMethod umfasst zwar alle HTTP-Methoden, jedoch geben diese folgende Fehlermeldung: HTTP Status 405 – Request method ‚DELETE‘ not supported dies trifft auch bei PUT zu. Ich meine gelesen zu haben, dass dies mit einer zusätzlichen Konfiguration zu lösen ist, welche bei Jersey nicht nötig ist.
Viele Grüße
Michi
Hallo Michael,
bei Gelegenheit werde ich das mal ausprobieren.
Viele Grüße
Frank
UPDATE (22.04.2012):
Ich habe den Beitrag Spring mit Spring mit RESTful Webservice erstellt.