Auf einen Blick: Das Spring Framework ist ein Open-Source-Framework zum Aufbau von Unternehmens-Java-Anwendungen und konzentriert sich darauf, die Entwicklung mit Funktionen wie Abhängigkeitsinjektion und aspektorientierter Programmierung zu vereinfachen. Es integriert sich in andere Spring-Projekte wie Spring Boot und Spring Cloud.
- Zu den Kernfunktionen gehören IoC-Container, Datenzugriff und Transaktionsmanagement.
- Spring vereinfacht die Webanwendungsentwicklung mit MVC-Architektur und Testunterstützung.
Java ist eine der beliebtesten und am weitesten verbreiteten Programmiersprachen und treibt alles von mobilen Anwendungen bis hin zu groß angelegten Unternehmenssystemen an. Da Java nahezu jede Art von Entwicklung antreiben kann, haben sich zahlreiche Frameworks und Werkzeuge entwickelt, um Java-basierte Softwareentwicklungen zu vereinfachen und zu optimieren.
Wenn es darum geht, Java-basierte Webanwendungen zu erstellen, ist Spring eines der beliebtesten Frameworks. In diesem Artikel betrachten wir das Spring-Framework und wie man damit Java-Anwendungen erstellt.
Was ist das Spring Framework?
Das Spring Framework ist ein Open-Source-Framework zum Aufbau von Unternehmens-Java-Anwendungen. Spring zielt darauf ab, den komplexen und umständlichen Entwicklungsprozess für Unternehmens-Java-Anwendungen zu vereinfachen, indem ein Framework angeboten wird, das Technologien wie:
- Aspektorientierte Programmierung (AOP)
- Abhängigkeitsinjektion (DI)
- Ganz normales Java-Objekt (POJO)
Trotz all dieser Technologien ist Spring ein leichtes Framework, das zur Erstellung skalierbarer, sicherer und robuster Unternehmenswebanwendungen verwendet werden kann.
Auf Makroebene können wir das Spring-Framework als eine Sammlung von Unterframeworks wie Spring Web Flow, Spring MVC und Spring ORM betrachten. Neben Java unterstützt Spring auch Kotlin und Groovy.
Das Spring-Framework ist auch die Grundlage, die alle anderen Spring-basierten Projekte antreibt, wie zum Beispiel:
- Spring Boot
- Frühlingswolke
- Spring GraphQL
Kernmerkmale des Spring Frameworks
Schauen wir uns die Kernfunktionen des Spring-Frameworks an.
IoC-Container (Inversion der Steuerung)
Der IoC-Container ist eines der Kernfunktionen von Spring, das eine optimierte Möglichkeit zur Konfiguration und Verwaltung von Java-Objekten bietet. Dieser Container ist verantwortlich für die Verwaltung des Lebenszyklus eines definierten Java-Objekts und erhöht so die Konfigurierbarkeit einer Spring-basierten Anwendung erheblich.
IoC verwendet die Abhängigkeitsinjektions- oder Abhängigkeitssuchmuster, um während der Laufzeit die Objektreferenz bereitzustellen. Der Container besteht aus Assemblercode, der für das Konfigurationsmanagement erforderlich ist.
Spring stellt org.springframework.beans und org.springframework.context bereit, die verwendet werden können, um diese Funktionen zu erleichtern.
Unterstützung für aspektorientierte Programmierung
AOP zielt darauf ab, mehr Modularität für die übergreifenden Anliegen zu bieten, also Funktionen, die sich über die gesamte Anwendung erstrecken, wie zum Beispiel:
- Holzeinschlag
- Caching
- Transaktionsmanagement
- Authentifizierung
- Und so weiter.
Darüber hinaus ergänzt AOP die objektorientierte Programmierung, indem es eine andere Möglichkeit bietet, das Programm zu strukturieren, wobei die OOP-Modularität auf Klassen basiert.
Im AOP ist die Haupteinheit der Modularität ein Aspekt (querschnittsbezogenes Thema). Dies ermöglicht es Nutzern, AOP zu nutzen, um benutzerdefinierte Aspekte und deklarative Unternehmensdienste zu erstellen. Der IoC-Container ist nicht von AOP abhängig, was Entwicklern zusätzliche Freiheit bietet, ihre bevorzugte Programmiermethode auszuwählen.
Aspektorientierte Programmierung in Kombination mit dem Spring IoC bietet jedoch eine robuste Middleware-Lösung.
Datenzugriffsrahmen
Datenbankkommunikationsprobleme sind eines der häufigsten Probleme, mit denen Entwickler bei der Entwicklung von Anwendungen konfrontiert sind. Spring vereinfacht den Datenbankkommunikationsprozess, indem es direkte Unterstützung für beliebte Java-Datenzugriffsframeworks wie JDBC, Hibernate, Java Persistence API (JPA) usw. bietet.
Zusätzlich bietet es Funktionen wie Ressourcenmanagement, Exception Handling und Resource Wrapping für alle unterstützten Datenzugriffs-Frameworks, was den Entwicklungsprozess weiter vereinfacht.
Transaktionsmanagement-Rahmenwerk
Im Gegensatz zur Java Transaction API (JTA) ist das Spring Transaction Management Framework nicht auf globale und verschachtelte Transaktionen beschränkt. Spring bietet einen Abstraktionsmechanismus für Java, der es den Nutzern ermöglicht:
- Arbeiten Sie mit lokalen, globalen und verschachtelten Transaktionen
- Speicherpunkte
- Vereinfachen Sie das Transaktionsmanagement in der gesamten Anwendung
Das Spring Data Access Framework integriert sich direkt mit dem Transaction Management Framework und unterstützt Nachrichten und Caching. Dies ermöglicht es Entwicklern, funktionsreiche transaktionale Systeme zu erstellen, die sich über die Anwendungen erstrecken, ohne auf EJB oder JTA angewiesen zu sein.
Spring MVC-Rahmenwerk
Das Spring MVC ermöglicht es Entwicklern, Anwendungen mit dem beliebten MVC-Muster zu erstellen. Es handelt sich um ein anforderungsbasiertes Framework, das es Entwicklern ermöglicht, einfach maßgeschneiderte MVC-Implementierungen zu erstellen, die genau zu ihren Bedürfnissen passen.
Die Kernkomponente von Spring MVC ist die DispatcherServlet-Klasse, die Benutzeranfragen verarbeitet und diese dann an den richtigen Controller weiterleitet. Dies ermöglicht es dem Controller, die Anfrage zu verarbeiten, das Modell zu erstellen und die Informationen dann über eine festgelegte Ansicht an den Endnutzer weiterzugeben.
Spring-Webservice
Diese Spring Web Service-Komponente bietet eine vereinfachte Möglichkeit, Webservice-Endpunkte in der Anwendung zu erstellen und zu verwalten. Sie bietet einen geschichteten Ansatz, der mithilfe von XML verwaltet werden kann und verwendet werden kann, um Webanfragen auf ein bestimmtes Objekt zuzuweisen.
Frühlingstest-Rahmenwerke
Testen ist ein Kernbestandteil jeder Entwicklung. Spring vereinfacht das Testen innerhalb des Frameworks mit Komponenten wie:
- Mock-Objekte
- TestContext-Framework
- Frühjahrs-MVC-Test
- Und so weiter.
(Lesen Sie über Testautomatisierungs-Frameworks.)
Spring-Framework-Architektur
OK, wir haben uns die Kernfunktionen angesehen, die Spring zu einem ausgezeichneten Framework machen. Jetzt schauen wir uns die Architektur von Spring an – die Architektur, die all diese Funktionen ermöglicht.
Das obige Diagramm stellt die grundlegenden Komponenten der Spring-Architektur dar. Wie Sie sehen können, wird Spring mit verschiedenen Modulen aufgebaut, die unterschiedliche Funktionalitäten ermöglichen.
Kerncontainer
Dies enthält die grundlegenden Module, die das Fundament des Spring-Frameworks bilden.
- Core (Spring-Core) ist der Kern des Frameworks, das Funktionen wie Inversion of Control und Abhängigkeitsinjektion antreibt.
- Bohnen (Frühlingsbohnen) liefern eine Bohnenfabrik, die eine ausgefeilte Umsetzung des Fabrikmusters darstellt.
- Context (spring-context) baut auf Core und Beans auf und bietet ein Medium zum Zugriff auf definierte Objekte. Die ApplicationContext-Schnittstelle ist der Kernbestandteil des Context-Moduls, und die spring-context-support unterstützt Drittanbieter-Interaktionen wie Caching, Mailing und Template-Engines.
- SpEL (spring-expression) ermöglicht es Benutzern, die Spring Expression Language zu verwenden, um den Objektgraphen zur Laufzeit abzufragen und zu bearbeiten.
Datenzugriff/-integration
Dazu gehören die Module, die zum Datenzugriff und zur Verarbeitung von Transaktionen in einer Anwendung verwendet werden.
- JDBC (spring-jdbc) bietet eine JDBC-Abstraktionsschicht , die die Notwendigkeit einer separaten JDBC-Codierung bei Datenbanken überflüssig macht.
- ORM (spring-orm) sind Integrationsschichten für beliebte objektrelationale Mapping-APIs wie JPA und JDO Hibernate.
- OXM (spring-oxm) ist die Abstraktionsschicht, die Objekt-/XML-Mapping-Implementierungen wie JAXB und XStream unterstützt.
- JMS (spring-jms) ist das Java-Messaging-Service-Modul, das Nachrichten erstellt und konsumiert, die direkt mit dem Spring-Messaging-Modul integriert werden.
- Transaction (spring-tx) bietet programmatisches und deklaratives Transaktionsmanagement für Klassen, die spezielle Schnittstellen und POJOs enthalten.
Web
Die Webschicht bezieht sich auf Module, die webbasierte Funktionen in Spring antreiben.
- WebSocket (spring-websocket) versorgt die websocketbasierte Kommunikation für Clients und Server.
- Servlet (spring-webmvc) ist das Spring WebMVC-Modul, das die MVC- und REST-Implementierungen enthält.
- Web (spring-web) bietet alle grundlegenden weborientierten Funktionen und enthält einen HTTP-Client sowie webbezogene Teile des Spring-Remotes.
- Portlet (spring-webmvc-portlet) stellt die MVC-Implementierung zur Verfügung, die in einer Portlet-Umgebung verwendet werden kann.
Weitere Module
- AOP (spring-aop) bietet eine aspektorientierte Programmierimplementierung, die bei der Erstellung von Anwendungen verwendet werden kann.
- Aspects (Spring-Aspects) ermöglicht eine direkte Integration mit der AspectJ-Programmiererweiterung durch die Eclipse Foundation.
- Instrumentierung (Feder-Instrument) ist die Implementierung von Klasseninstrumentierungsunterstützung und Klassenlader für Anwendungsserver.
- Messaging (spring-messaging) bietet eine robuste Plattform zur Verwaltung von Messaging in Anwendungen.
- Test (Spring-Test) ist das Spring-Testmodul, das Unit- und Integrationstests mit JUnit und TestNG unterstützt.
Einstieg mit dem Spring-Framework
Jetzt, da wir verstehen, was Spring zu einem wirklich großartigen Rahmen macht, schauen wir uns an, wie wir mit der Entwicklung eines Spring-Projekts beginnen.
Wir werden eine Windows-Umgebung und Visual Studio Code als unsere IDE für das folgende Beispiel verwenden. Zuerst müssen wir Java auf unserem PC installieren. Sie können die neuesten vorgefertigten Open-Source-Java-(OpenJDK)-Binärdateien aus dem Adoptium-Projekt erhalten. Zum Zeitpunkt des Schreibens dieses Artikels werden wir die neueste LTS-Version verwenden, nämlich OpenJDK 17 (LTS).
Obwohl man ein Spring-Projekt immer manuell erstellen kann, bietet der Spring-Initialisierer (https://start.spring.io/) den Nutzern eine einfache Möglichkeit, das Projekt mit Spring Boot zu konfigurieren. Spring Boot ist eine Erweiterung des Spring-Frameworks, die es Nutzern ermöglicht, eigenständige Spring-basierte Anwendungen mit minimalen Abhängigkeiten zu erstellen.
Der Spring-Initialisierer bietet eine zentrale Plattform, um einfach ein Spring-Projekt mit verschiedenen Optionen zu erstellen, darunter Projekttyp (Maven/Gradle), Sprache (Java, Kotlin, Groovy), Projektmetadaten, Packaging, Java-Version und Abhängigkeiten.
Wir werden in der com.myproject-Gruppe ein einfaches Maven-Projekt namens test_app erstellen, das Java und Spring Boot 2.5.5 verwendet, das Java 17 (OpenJDK) mit Spring Web als Abhängigkeit anspricht.
Die obige Aktion erzeugt eine Zip-Datei. Entpacke diese Zip-Datei und öffne den Ordner in der IDE. Da wir Visual Studio Code als IDE verwenden, stelle sicher, dass du die entsprechenden VSCode-Erweiterungen installiert hast, um Java und Spring zu unterstützen. Im Folgenden sind die empfohlenen Erweiterungen aufgeführt.
- Erweiterungspaket für Java – Visual Studio Marketplace
- Spring Boot Erweiterungspaket – Visual Studio Marktplatz
Navigiere zur primären Java-Datei (Beispiel: :\src\main\java\com\myproject\test_app TestAppApplication.java\) und ändere den Code wie folgt. Er erstellt einen einfachen Webserver, der eine Begrüßung zurückgibt, wenn ein Benutzer zur Begrüßungs-URL navigiert.
package com.myproject.test_app;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
@RestController
public class TestAppApplication {
public static void main(String[] args) {
SpringApplication.run(TestAppApplication.class, args);
}
@GetMapping("/greeting")
public String hello(@RequestParam(value = "name", defaultValue = "World") String name) {
return String.format("<h1>Hello %s!, This is My First Spring Project</h1>", name);
}
}
VS Code-Ansicht:
Jetzt können wir das Projekt bauen und ausführen, indem wir das Terminal in der Wurzel des Projektordners öffnen und den folgenden Befehl ausführen.
/mvnw spring-boot:run
Ergebnis:
Er startet den Webserver, und wir können mit folgendem URL-Format zur Begrüßungsseite navigieren.
http://localhost:8080/greeting?name=<Value>
Wenn wir zum Beispiel zu http://localhost:8080/greeting?name=Jake URL navigieren, wird Jake begrüßt.
Spring kann Unternehmens-Java-Anwendungen antreiben
Spring ist ein leistungsstarkes Java-Framework, das für Java-Anwendungen auf Unternehmensniveau in jeder Größenordnung eingesetzt werden kann. Auch wenn es manchmal komplex und einschüchternd werden kann, kann man dieses Framework leicht beherrschen und die nächste großartige Software bauen, wenn man von Grund auf neu beginnt.
Das Spring Framework stellt zusammen mit allen anderen Spring-Projekten alle notwendigen Werkzeuge und Funktionen bereit, um jede Benutzeranforderung zu erfüllen und gleichzeitig den Entwicklungsprozess zu vereinfachen.
Verwandte Literatur
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.