it-swarm-eu.dev

Warum nicht Spring Framework?

Gibt es Nachteile bei der Bindung meiner Anwendung an das Spring Framework?

Ich spreche nicht über solche Fehler oder Probleme. Ich spreche von strategischen, architektonischen Dingen, die meinen Anwendungslebenszyklus beeinflussen.

Sollte ich Spring gegenüber Java EE-Kernfunktionen, die vom EE-Container unterstützt werden, bevorzugen? Was sind die Vorteile?

43

Da andere Beiträge hier den Vorteil erwähnen, werde ich die negativen Aspekte des Frühlings erwähnen. Trotz dieser Negative ist Spring in seiner Nische allgegenwärtig, zuverlässig und funktioniert wie angekündigt.

Also weiter zu den Negativen:

  • Enorm: Ich möchte keine Gläser mit 3000 Klassen in mein kleines Hobbyprojekt einbauen.

  • Es gibt einige Beschreibungen, die langsamer sind als einige andere DI-Frameworks wie Guice oder Pico. anekdotisch und wahrscheinlich nicht zu wichtig.

  • Der Umgang mit einigen Teilen des Frühlings kann frustrierend sein, wenn es sich nicht um gut dokumentierte Teile des Kerns handelt und die Dokumentation in den verschiedenen Hauptversionen unterschiedlich ist.

Als Nebeneffekt seiner Größe sollten Sie sich darauf einstellen, freudige Stunden damit zu verbringen, durch Stapel von Klassen zu graben, die, obwohl sie logisch benannt sind, zu einem riesigen Stapel von Substantiven verschmelzen, wenn Sie müde sind ("Sicher, Sie verbinden einfach Ihre TransactionAwareConnectionFactoryProxy mit Ihrer UserCredentialsConnectionFactoryAdapter zu Ihrem .. zzzzzzzz "). Um fair zu sein, sie sind wirklich logisch benannt, es ist eine vernünftige Antwort auf die Größe des Frameworks, aber immer noch.

Möglicherweise kann der Frühling aufgrund dieser Anpassung neuer Stücke langsam sein, zumindest für mich. Nicht so sehr mit der Kernfeder, aber es gibt Anschlüsse für fast alles, und sie sind nicht alle so gut dokumentiert, wie sie sein könnten, und dann fangen Sie an, durch die Substantivsuppe zu waten. Auch hier ist alles nur eine Reaktion auf seine Größe.

42
Steve B.

Spring hat nur sehr wenige Nachteile

Ich habe lange und gründlich nachgedacht, um ernsthafte Nachteile bei der Verwendung von Spring zu finden, und ich fürchte, ich bin gescheitert. Spring ist ein hervorragendes Toolkit für die JEE/OSGi-Modelle. Es bietet eine breite Palette nicht-invasiver Vorlagen, die die Arbeit mit den oft umständlichen unterstützenden APIs, die von Anwendungscontainern bereitgestellt werden, erheblich vereinfachen.

Frühling gegen den Kern JEE

Spring ersetzt nicht die JEE-Kerntechnologien - naja, vielleicht EJBs, aber mit der neuen EJB3-Spezifikation ist kaum etwas drin - stattdessen bietet es Vorlagen, die ihre Verwendung erheblich vereinfachen. Betrachten Sie JAX-RS als RESTful-Webdienst-API. Spring liefert das RestTemplate, das normalerweise wie folgt verwendet wird (vorausgesetzt, es wird injiziert):

SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);

Dies wird ausgelöst, um someURI das XML/JSON/YAML abzurufen und es in dem von Ihnen angegebenen Domänenobjekt zu entmarschieren. Alles in einer einzigen Codezeile.

Ausnahmen und Fehlerprotokollierung werden als Laufzeitausnahmen behandelt, wodurch es einfacher wird, den lokalen Code sauber zu halten. Spring reduziert sogar externe Abhängigkeiten, wo immer dies möglich ist, sodass im obigen Beispiel nur die Java.net. * -Pakete verwendet werden.

Es gibt Vorlagen für JMS, JAX-WS, JPA, JTA und so weiter. All dies erleichtert die Arbeit mit diesen Standards erheblich und macht Ihren Code sauberer und weniger fehleranfällig.

Pick'n'mix-Architektur

Aus architektonischer Sicht betont Spring einen leichten Pick'n'Mix-Ansatz. Dies hat zur Folge, dass Systemarchitekten die Verwendung aufgeblähter All-for-Every-Anwendungscontainer wie WebSphere, JBoss oder Glassfish vermeiden und stattdessen ihre leichtgewichtigen Gegenstücke auswählen können - Jetty, Tomcat usw.

Warum ist das wichtig? Die größeren Anwendungscontainer haben einen viel längeren Aktualisierungszyklus, der den Anforderungen einiger Clients besser entspricht als anderen. Banken müssen nicht so agil sein wie ein Ein-Mann-Startup.

Wenn Sie die neuesten Versionen unterstützender Frameworks verwenden möchten, ist es unwahrscheinlich, dass Sie diese in den großen Anwendungscontainern finden. Stattdessen müssen Sie sie manuell einfügen, und Spring macht dies einfach.

Außerdem müssen Sie nur die Technologien einbeziehen, die Sie benötigen. Die Anwendungscontainer geben Ihnen JMS, EJB und jedes andere Akronym unter der Sonne, aber Sie möchten nur eine einfache Persistenz mit JPA. Schließen Sie Frühling und Ruhezustand ein und Sie sind fertig.

Warum also nicht Frühling?

Vermeiden Sie Spring, wenn Sie herstellerspezifische Implementierungen von Bibliotheken verwenden möchten. Vermeiden Sie dies auch, wenn Sie Ihre Konfigurationsdetails in Ihren Klassen behalten möchten, anstatt sie in XML oder JNDI zu externalisieren. Und vermeiden Sie es auf jeden Fall, wenn Sie der Meinung sind, dass kostenlose Open-Source-Lösungen nicht für Ihre Umgebung geeignet sind.

9
Gary Rowe

eine interessante Sache, die Martin Thompson in diesem Artikel erwähnt, ist, dass der Frühling einen nicht trivialen Einfluss auf die GC-Zeiten haben kann:

Halten Sie die Anrufstapel relativ klein. Hier gibt es noch mehr zu tun. Wenn Sie verrückt genug sind, um Spring zu verwenden, überprüfen Sie Ihre Anruflisten, um zu sehen, was ich meine! Der Müllsammler muss sie laufen lassen, um erreichbare Gegenstände zu finden. -Martin Thompson

Diese Art von Dingen wird für die meisten Arten von Apps kein großes Problem sein, aber es ist ein sehr reales Problem für die Arten von Apps, auf die sich Martin bezieht.

5
Paul Sanwald

Der Frühling ist wirklich gut. Spring Core ist in Ordnung. Ich möchte zu den anderen Punkten hinzufügen: Wenn Sie sich in der Nischenkategorie befinden, in der Leistung wirklich ein Problem darstellt, sollten Sie die anderen Spring-Module nur vermeiden, wenn Sie in den Händen von Top-Entwicklern sind. Dies ist nur dann ein Problem, wenn Sie ein System ausführen, bei dem die Leistung wirklich entscheidend ist. In den Händen von durchschnittlichen bis guten Entwicklern wird Spring Ihnen wahrscheinlich tatsächlich eine Leistungssteigerung bringen, indem es Ihnen hilft, sauberen, einfachen Code zu schreiben.

3
jasonk

Spring ist bemüht, nicht invasiv zu sein, um es nicht mit Ihrem Anwendungscode zu verknüpfen.

Es bewegt sich auch mehr in diese Richtung über tiem. In früheren Versionen mussten Sie Basisklassen erweitern, dann wurden Anmerkungen hinzugefügt, und heutzutage werden POJOs, die in XML konfiguriert sind, immer häufiger verwendet.

Dies ist ein enormer strategischer Vorteil gegenüber anderen Anwendungsframeworks.

1

Der Frühling ist jetzt im Grunde ein Teil der Plattform geworden. Überall in JEE5 und 6 finden Sie immer mehr Ressourceninjektion, so dass zumindest dieser Teil von Spring, wenn Sie dabei bleiben, nur ein weiterer Teil der Plattform ist/sein wird (siehe @Inject). Andere Teile ... sind sich nicht so sicher, besonders wenn es um aspektorientierte Programmierung geht. Es gibt andere Anbieter dieser Dienste, Guice, ursprünglich von Google, und Weld von JBoss, von dem ich glaube, dass es auf Guice basiert, bieten die gleiche Funktionalität, wenn Sie sich an die Abhängigkeit von JSR-330 Java) halten Einspritzspezifikationen.

YMMV

1
mezmo