Maven-Abhängigkeit spring-web vs spring-webmvc

100

Was ist der Unterschied zwischen den folgenden Abhängigkeiten?

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

vs.

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-web</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>

Wenn ich spring-webmvcalleine einbeziehe, spring-webwird implizit hinzugefügt.

Wann sollten wir spring-weballeine verwenden?

Mahendran
quelle

Antworten:

134

spring-web bietet zentrale HTTP-Integration, einschließlich einiger praktischer Servlet-Filter, Spring HTTP Invoker, Infrastruktur zur Integration in andere Web-Frameworks und HTTP-Technologien, z. B. Hessian, Burlap.

spring-webmvcist eine Implementierung von Spring MVC. spring-webmvc hängt davon ab , auf spring-webdiese Weise mit, wird es transitively hinzufügen spring-web. Sie müssen nicht spring-webexplizit hinzufügen .

Sie sollten sich nur darauf verlassen, spring-webwenn Sie Spring MVC nicht verwenden, aber andere webbezogene Technologien nutzen möchten, die Spring unterstützt.

Tomasz Nurkiewicz
quelle
10
Stimmen Sie zu, +1. Aber seltenes Szenario: Einschließlich spring-webmvcinturn fügt hinzu spring-web, aber wenn Sie die spring-webmvc-Version als 4.0.2 haben und eine weitere Abhängigkeit hinzufügen, sagen wir die swagger-springmvcVersion 0.8.8, dann fügt sie die spring-webVersion 3.2.x hinzu. In diesem Fall werden möglicherweise Ausnahmen für nicht gefundene Klassen spring-webangezeigt. Hier müssen Sie also explizit eine Version als 4.0.2 hinzufügen und versionieren. Ich bin heute darauf gestoßen
Spiderman
7
@ Spiderman Ich würde die transitive spring-webAbhängigkeit inswagger-springmvc
Roger
@ tomasz-nurkiewicz was ist der Unterschied zwischen spring-jms und spring-messaging-Modul
Legende
1
Was sollten Sie verwenden, wenn Sie eine Anwendung erstellen möchten, die eine Rest-API ist und für die Sie überhaupt keine Ansicht (jsp) benötigen? spring-web oder spring-webmvc?
Mohammad Eghlima
1
@MohammadEghlima in diesem Fall verwenden Sie spring-web
leeCoder
7

Aus dem offiziellen Dokument: Das Spring-Web-Modul bietet grundlegende weborientierte Integrationsfunktionen wie die Funktion zum Hochladen mehrteiliger Dateien und die Initialisierung des IoC-Containers mithilfe von Servlet-Listenern und einem weborientierten Anwendungskontext. Es enthält auch einen HTTP-Client und die webbezogenen Teile der Remoting-Unterstützung von Spring.

Das spring-webmvc-Modul (auch als Web-Servlet-Modul bezeichnet) enthält Spring's Model-View-Controller (MVC) und die REST-Web-Services-Implementierung für Webanwendungen. Das MVC-Framework von Spring bietet eine saubere Trennung zwischen Domänenmodellcode und Webformularen und lässt sich in alle anderen Funktionen des Spring Framework integrieren.

Das spring-webmvc-Portlet-Modul (auch als Web-Portlet-Modul bezeichnet) bietet die MVC-Implementierung für die Verwendung in einer Portlet-Umgebung und spiegelt die Funktionalität des Servlet-basierten spring-webmvc-Moduls wider.

https://docs.spring.io/spring/docs/4.3.22.RELEASE/spring-framework-reference/htmlsingle/#overview-web

LiLi
quelle