Wofür genau ist Spring Framework? [geschlossen]

623

Ich höre viel über Spring , die Leute sagen im ganzen Web, dass Spring ein guter Rahmen für die Webentwicklung ist. Wofür genau ist Spring Framework?

Maksim
quelle
10
Ich verstehe, dass die Frage sehr weit gefasst ist, aber ich denke, dass in diesem speziellen Fall die Frage für Junion-Entwickler sehr wichtig ist, die oft von Leuten über Spring gesprochen werden, die davon ausgehen, dass sie so populär sind, dass nicht einmal gesagt werden muss, was es tut.
Heben
2
Die Frage wurde vor 10 Jahren gestellt, und zu dieser Zeit war der Frühling mit all seinen Unterprojekten wie Spring Boot, Spring Data, Spring Rest usw. etwas kleiner als jetzt. Und deshalb war er vor einem Jahr wegen näher die Breite dieser Frage. Zu der Zeit, als ich diese Frage stellte, wollte ich nur DI verstehen und warum es benötigt wird.
Maksim

Antworten:

713

Grundsätzlich ist der Frühling ein Rahmen für Dies ist ein Muster, mit dem sehr entkoppelte Systeme aufgebaut werden können.

Das Problem

Angenommen, Sie müssen die Benutzer des Systems auflisten und eine Schnittstelle mit dem Namen deklarieren UserLister:

public interface UserLister {
    List<User> getUsers();
}

Und vielleicht eine Implementierung, die auf eine Datenbank zugreift, um alle Benutzer zu erreichen:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

In Ihrer Ansicht müssen Sie auf eine Instanz zugreifen (nur ein Beispiel, denken Sie daran):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

Beachten Sie, dass der obige Code die Variable nicht initialisiert hat userLister. Was sollen wir machen? Wenn ich das Objekt explizit wie folgt instanziiere:

UserLister userLister = new UserListerDB();

... Ich würde die Ansicht mit meiner Implementierung der Klasse koppeln, die auf die Datenbank zugreift. Was ist, wenn ich von der DB-Implementierung zu einer anderen wechseln möchte, die die Benutzerliste aus einer durch Kommas getrennten Datei abruft (denken Sie daran, es ist ein Beispiel)? In diesem Fall würde ich erneut zu meinem Code gehen und die obige Zeile in Folgendes ändern:

UserLister userLister = new UserListerCommaSeparatedFile();

Dies ist bei einem kleinen Programm wie diesem kein Problem, aber ... Was passiert in einem Programm mit Hunderten von Ansichten und einer ähnlichen Anzahl von Geschäftsklassen? Die Wartung wird zum Albtraum!

Spring-Ansatz (Dependency Injection)

Spring verdrahtet die Klassen mithilfe einer XML-Datei oder von Anmerkungen. Auf diese Weise werden alle Objekte von Spring instanziiert und initialisiert und an den richtigen Stellen (Servlets, Web Frameworks, Geschäftsklassen, DAOs usw. usw. usw.) injiziert ...).

Zurück zum Beispiel im Frühjahr: Wir brauchen nur einen Setter für das userListerFeld und entweder eine XML-Datei wie diese:

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

oder kommentieren Sie das in unserer Ansichtsklasse abgelegte einfach mit @Inject:

@Inject
private UserLister userLister;

Auf diese Weise ist die Ansicht beim Erstellen auf magische Weise UserListerbetriebsbereit.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

Es ist toll! Ist es nicht?

  • Was ist, wenn Sie eine andere Implementierung Ihrer UserListerSchnittstelle verwenden möchten ? Ändern Sie einfach das XML.
  • Was ist, wenn keine UserListerImplementierung bereitsteht? Programmieren Sie eine zeitliche Scheinimplementierung UserListerund erleichtern Sie die Entwicklung der Ansicht.
  • Was ist, wenn ich Spring nicht mehr verwenden möchte? Benutze es einfach nicht! Ihre Anwendung ist nicht daran gekoppelt. Umkehrung der Kontrollzustände : "Die Anwendung steuert das Framework, nicht das Framework steuert die Anwendung".

Es gibt einige andere Optionen für die Abhängigkeitsinjektion. Was Spring meiner Meinung nach neben seiner Einfachheit, Eleganz und Stabilität so berühmt gemacht hat, ist, dass die Jungs von SpringSource viele, viele POJOs programmiert haben, die helfen, Spring in viele andere gängige Frameworks zu integrieren, ohne es zu sein aufdringlich in Ihrer Anwendung. Außerdem hat Spring mehrere gute Teilprojekte wie Spring MVC, Spring WebFlow, Spring Security und wieder eine lange Liste von usw.

Hoffe das hilft. Wie auch immer, ich ermutige Sie, Martin Fowlers Artikel über Abhängigkeitsinjektion und Inversion der Kontrolle zu lesen, weil er es besser macht als ich. Nach dem Verständnis der Grundlagen einen Blick auf nehmen Frühling Dokumentation , meiner Meinung nach , es wird verwendet , um immer das beste Frühling Buch.

Victor Hugo
quelle
148
Was ist der Unterschied zwischen dem Ändern einer Codezeile und einer XML-Zeile? Der Aufwand und die Wartung sind genau gleich oder sogar noch schlimmer, da die externen XML-Dateien wohl die Komplexität erhöhen? Tut mir leid, aber ich verstehe es einfach nicht, ich sehe überhaupt keinen Nutzen. Bitte füllen Sie mich aus, wenn mir etwas fehlt.
Fred
23
@fred - Stellen Sie sich vor, Sie führen Unit-Tests durch. Ohne Abhängigkeitsinjektion (DI kann mit Anmerkungen oder mit XML verwendet werden) können Sie nicht richtig testen, da Sie die Abhängigkeiten nicht verspotten können.
Petar Minchev
18
@fred - das Definieren aller Injektionen in XML macht in der Tat wenig Sinn. Es ist ein enormer Aufwand zu warten. Daher führte EJB das Konzept der Anmerkungen für Injektionspunkte ein. Diese sind viel einfacher und eine Standardinstanz wird eingefügt (für Komponententests kann dies einmal geändert werden). Dies hat so gut funktioniert, dass Spring diesen Ansatz nun kopiert hat. Beachten Sie, dass bei Bedarf (aber nur bei Bedarf) Anmerkungen in EJB weiterhin von XML überschrieben werden können.
Mike Braun
36
Oder verwenden Sie eine werkseitige statische Methode. Ändern Sie den Rückgabetyp der Factory, und jetzt werden alle Klassen geändert, die diesen Rückgabewert verwenden. Presto Spring wird jetzt nicht mehr benötigt ...
Qix - MONICA WURDE AM
16
@mmcrae Ich würde lieber einen Refactorization-Aufruf in meiner IDE durchführen, als XML zu schreiben.
Qix - MONICA wurde am
63

Spring enthält ( wie Skaffman zu Recht hervorhob ) ein MVC-Framework. Um es kurz zu erklären, hier sind meine Eingaben. Spring unterstützt die Trennung von Service-Layer, Web-Layer und Business-Layer. Am besten ist es jedoch, Objekte zu "injizieren". Um dies anhand eines Beispiels zu erklären, betrachten Sie das folgende Beispiel:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

Jetzt haben Sie in Ihrem Code eine Klasse namens RoadTrip wie folgt

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Wann immer Sie eine Instanz von Trip möchten; Manchmal möchten Sie vielleicht, dass ein SUV FourWheel initialisiert, oder manchmal möchten Sie Sedan. Es hängt wirklich davon ab, was Sie je nach Situation wollen.

Um dieses Problem zu lösen, möchten Sie ein Factory-Muster als Erstellungsmuster haben. Wo eine Fabrik die richtige Instanz zurückgibt. Schließlich erhalten Sie viel Klebercode, um Objekte korrekt zu instanziieren. Spring erledigt die Aufgabe des Klebercodes am besten ohne diesen Klebercode. Sie deklarieren Zuordnungen in XML und es werden die Objekte automatisch initialisiert. Es verwendet auch viel Singleton-Architektur für Instanzen und dies hilft bei der optimierten Speichernutzung.

Dies wird auch als Inversion Of Control bezeichnet. Andere Frameworks hierfür sind Google Guice, Pico Container usw.

Abgesehen davon verfügt Spring über ein Validierungsframework und umfassende Unterstützung für die DAO-Schicht in Zusammenarbeit mit JDBC, iBatis und Hibernate (und vielen weiteren). Bietet eine hervorragende Transaktionskontrolle über Datenbanktransaktionen.

Spring bietet noch viel mehr, das in guten Büchern wie "Pro Spring" nachgelesen werden kann.

Die folgenden URLs können ebenfalls hilfreich sein.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = SpringFramework

Priyank
quelle
5
Spring enthält ein MVC-Framework. Aber es ist viel, viel mehr.
Skaffman
WebMVC ist Teil der Core Spring Distribution, ohne zu viel zu picken. Webflow, RCP et al. Nicht.
Skaffman
1
Das ist schön, ich wusste nicht, dass Sie Objekte vom Typ Interface in Java instanziieren können - was illegal ist @skaffman hilft mir, diese Antwort zu verstehen (siehe Instanz von FourWheel)
Jossie Calderon
47

Früher war Spring nur ein Abhängigkeitsinjektionsrahmen wie ( Guice , PicoContainer , ...), aber heute ist es eine Komplettlösung für die Erstellung Ihrer Unternehmensanwendung .

Die Federabhängigkeitsinjektion, die natürlich das Herz des Frühlings ist, ist immer noch da (und Sie können andere gute Antworten hier überprüfen), aber es gibt noch mehr vom Frühling ...

Der Frühling hat jetzt viele Projekte mit jeweils einigen Unterprojekten ( http://spring.io/projects ). Wenn jemand über Frühling spricht, müssen Sie herausfinden, um welches Frühlingsprojekt es sich handelt, ob es sich nur um einen Federkern handelt, der als Federrahmen bekannt ist , oder um ein anderes Frühlingsprojekt.

Einige erwähnenswerte Frühlingsprojekte sind:

Wenn Sie weitere Funktionen für Ihre Anwendung benötigen, finden Sie diese möglicherweise auch dort:

  • Spring Batch Batch Framework, das die Entwicklung von
    Batch-Anwendungen ermöglicht
  • Spring HATEOAS einfache Erstellung der REST-API basierend auf dem HATEOAS-Prinzip
  • Spring Mobile und Spring Andriod für die Entwicklung mobiler Anwendungen
  • Spring Shell erstellt eine voll funktionsfähige Shell-Anwendung (auch als Befehlszeilenanwendung bezeichnet)
  • Spring Cloud- und Spring Cloud-Datenfluss für Cloud-Anwendungen

Es gibt dort auch einige kleine Projekte, zum Beispiel spring-social-facebook ( http://projects.spring.io/spring-social-facebook/ ).

Sie können spring für die Webentwicklung verwenden, da es das Spring MVCModul enthält, das Teil des Spring Framework- Projekts ist. Oder Sie können spring mit einem anderen Webframework wie struts2 verwenden .

Alireza Fattahi
quelle
1
Ich würde eigentlich gerne sehen, dass mvc, data, jpa und andere Teile von Spring die Option haben, nicht Spring's Core DI zu verwenden, sondern Dagger stattdessen in das Herz von Spring zu stellen.
Dlamblin
25

Wofür ist der Frühling? Ich werde diese Frage in Kürze beantworten, aber zuerst schauen wir uns das Beispiel von Victor Hugo noch einmal an. Es ist kein gutes Beispiel, weil es die Notwendigkeit eines neuen Frameworks nicht rechtfertigt.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

Erledigt! Selbst wenn Sie jetzt Hunderte oder Tausende von Ansichten haben, müssen Sie nur noch die eine Codezeile ändern, wie im Spring XML-Ansatz. Das Ändern einer Codezeile erfordert jedoch immer noch eine Neukompilierung, anstatt XML zu bearbeiten. Nun, mein pingeliger Freund, benutze Ant und Skript weg!

Wofür ist der Frühling? Es ist für:

  1. Blinde Entwickler, die der Herde folgen
  2. Arbeitgeber, die niemals Diplom-Programmierer einstellen möchten, weil sie solche Rahmenbedingungen an der Uni nicht unterrichten
  3. Projekte, die mit einem schlechten Design begannen und Patchwork benötigen (wie das Beispiel von Victor Hugo zeigt)

Weiterführende Literatur: http://discuss.joelonsoftware.com/?joel.3.219431.12

Asche
quelle
11
Abgesehen von der Frustration wundere ich mich über Ihre Argumente. Ich kenne kein Programmierwerkzeug, mit dem Sie kein schlechtes Design erstellen können. Was Sie anstreben, ist, dass Sie mit Frameworks schlechten Code dazu bringen können, viele Dinge zu tun. Das ist allgemein gültig und nicht spezifisch für den Frühling. Ansonsten, worum geht es? Glauben Sie nicht, dass kompetente Entwickler das Angebot von Spring optimal nutzen können - insbesondere, welche Tools des Frameworks sie verwenden? Zumindest bin ich mir ziemlich sicher, dass Sie nicht implizieren, dass kein Spring-Entwickler jemals von der Erweiterung von Klassen gehört hat. Die weitere Lektüre ist jedoch lustig.
sthzg
2
Darüber hinaus funktioniert Ihr Beispiel, weil die Ansicht nur einen injizierten Dienst ( UserLister) benötigt. Was ist jedoch, wenn mehrere Dienste benötigt werden, die nicht von den BaseViewKindern der verschiedenen Benutzer gemeinsam genutzt werden? Es gibt (zum Glück) keine Mehrfachvererbung in Java.
Edouard Berthe
@EdouardBerthe Fair Punkt. Meine Antwort war kein Versuch, DI zu ignorieren, sie weist nur darauf hin, dass das in der akzeptierten Antwort gezeigte Beispiel nicht das beste ist; Das von Ihnen vorgeschlagene Szenario würde höchstwahrscheinlich besser funktionieren. Der Punkt, den ich wirklich ansprechen wollte, ist nicht, dass Sie DI nicht benötigen, sondern dass Sie nicht ein ganzes Framework benötigen, um dies zu tun.
Ash
19

Kurz zusammengefasst, ich werde sagen, dass der Frühling der "Kleber" in Ihrer Anwendung ist. Es wird verwendet, um verschiedene Frameworks und Ihren eigenen Code zu integrieren.

Johan
quelle
15

Frühling ist drei Dinge.

  1. Spring behandelt die Abhängigkeitsinjektion und ich empfehle Ihnen, Martin Fowlers hervorragende Einführung in die Abhängigkeitsinjektion zu lesen.
  2. Das zweite, was Spring tut, ist, exzellente Java-Bibliotheken auf sehr elegante Weise zu verpacken, um sie in Ihren Anwendungen zu verwenden. Ein gutes Beispiel finden Sie unter Spring Wraps Task Executors und Quartz Scheduler.
  3. Drittens bietet Spring eine Reihe von Implementierungen von Web-Inhalten wie REST, einem MVC-Webframework und mehr. Da Sie Spring für die ersten beiden verwenden, können Sie es möglicherweise einfach für alles verwenden, was Ihre Web-App benötigt.

Das Problem ist, dass Spring DI wirklich gut durchdacht ist, die Wrapper um andere Dinge wirklich gut durchdacht sind, indem die anderen Dinge alles durchdacht haben und Spring es einfach gut einwickelt. Die Spring-Implementierungen von MVC und REST und all den anderen Dingen sind nicht so gut gemacht (YMMV, IMHO), aber es gibt Ausnahmen (Spring Security ist eine Bombe). Daher benutze ich Spring für DI und seine coolen Wrapper, bevorzuge aber andere Dinge für das Web (ich mag Tapisserie sehr), REST (Jersey ist wirklich robust) usw.

Karstensrage
quelle
9
YMMV, IMHO - Ihre Laufleistung kann variieren, nach meiner bescheidenen Meinung für diejenigen von Ihnen, die Abkürzungen wie ich nicht fließend sprechen ...
Sakamoto Kazuma
11

Was Sie wahrscheinlich in einer Webanwendung mit Spring wollen -

  • Spring MVC, mit dem Sie mit 2.5+ POJOs als Controller-Klassen verwenden können, bedeutet, dass Sie nicht von einem bestimmten Framework aus erweitern müssen (wie in Struts oder Spring vor 2.5). Controller-Klassen sind auch dank der Abhängigkeitsinjektion kinderleicht zu testen
  • Frühlingsintegration mit Hibernate, die die Arbeit mit dieser ORM-Lösung (in den meisten Fällen) sehr vereinfacht
  • Wenn Sie Spring für eine Webanwendung verwenden, können Sie Ihre Domänenobjekte auf allen Ebenen der Anwendung verwenden. Dieselben Klassen, die mit Hibernate zugeordnet werden, sind die Klassen, die Sie als "Form Beans" verwenden. Dies wird von Natur aus zu einem robusteren Domänenmodell führen, auch weil dadurch die Anzahl der Klassen verringert wird.
  • Spring Form Tags erleichtern das Erstellen von Formularen ohne großen Aufwand.

Darüber hinaus ist Spring RIESIG - es gibt also viele andere Dinge, die Sie möglicherweise in einer Web-App wie Spring AOP oder Spring Security verwenden möchten. Die vier oben aufgeführten Dinge beschreiben jedoch die allgemeinen Komponenten von Spring, die in einer Web-App verwendet werden.

bpapa
quelle
9

Ich sehe zwei Teile dazu:

  1. "Wofür genau ist Frühling" -> siehe die akzeptierte Antwort von Victor Hugo.
  2. "[...] Frühling ist [ein] guter Rahmen für die Webentwicklung" -> Leute, die dies sagen, sprechen über Spring MVC. Spring MVC ist einer der vielen Teile von Spring und ein Webframework, das die allgemeinen Funktionen von Spring wie die Abhängigkeitsinjektion nutzt. Es ist ein ziemlich allgemeines Framework, da es sehr konfigurierbar ist: Sie können verschiedene Datenbank-Layer (Hibernate, iBatis, einfaches JDBC) und verschiedene Ansichtsebenen (JSP, Velocity, Freemarker ...) verwenden.

Beachten Sie, dass Sie Spring in einer Webanwendung problemlos verwenden können, ohne Spring MVC zu verwenden. Ich würde sagen, dass die meisten Java-Webanwendungen dies tun, während sie andere Web-Frameworks wie Wicket, Struts, Seam, ...

Tom De Leu
quelle
8

Der Frühling ist großartig, um Instanzen von Klassen zusammenzukleben. Sie wissen, dass Ihre Hibernate-Klassen immer eine Datenquelle benötigen. Spring verdrahtet sie miteinander (und hat auch eine Implementierung der Datenquelle).

Ihre Datenzugriffsobjekte benötigen immer einen Ruhezustand. Spring verdrahtet die Ruhezustandsklassen für Sie in Ihre DAOs.

Darüber hinaus bietet Spring Ihnen im Grunde solide Konfigurationen einer Reihe von Bibliotheken und darin eine Anleitung, welche Bibliotheken Sie verwenden sollten.

Der Frühling ist wirklich ein großartiges Werkzeug. (Ich habe nicht über Spring MVC gesprochen, sondern nur über das Basis-Framework).

Strohbraun
quelle
5

Die akzeptierte Antwort beinhaltet nicht die Verwendung von Anmerkungen, da Spring die Unterstützung für verschiedene Anmerkungen für die Konfiguration eingeführt hat.

Spring-Ansatz (Dependency Injection)

Es gibt noch eine andere Möglichkeit, die Klassen mithilfe einer XML-Datei miteinander zu verbinden: die Anmerkungen. Nehmen wir das Beispiel von der akzeptierte Antwort verwenden und registrieren die Bohne direkt auf die Klasse eine der Anmerkungen mit @Component, @Service,@Repository oder @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

Auf diese Weise ist beim Erstellen der Ansicht auf magische Weise ein UserLister einsatzbereit.

Die obige Aussage gilt mit einem kleinen Bonus, ohne dass XML-Dateien verwendet und mit einer anderen Anmerkung verkabelt werden müssen @Autowired , die eine relevante Implementierung findet und diese einfügt.

@Autowired
private UserLister userLister;

Verwenden Sie die @BeanAnnotation für eine Methode, mit der die Bean-Implementierung injiziert wird.

Nikolas
quelle
Falsch. Sie können die @BeanAnmerkung nicht auf Klassenebene verwenden. Muss einer der folgenden sein @Component, @Service, @Repositoryusw. Der Rest ist richtig. Sie sollten vielleicht auch darauf hinweisen, dass das automatische Verdrahten der Schnittstelle auf diese Weise nur funktioniert, wenn nur 1 Kandidatenklasse im Klassenpfad für die Injektion geeignet ist, andernfalls Spring-Anwendungsfehler.
Stefano L
@StefanoL: Ja, du hast recht. Ich frage mich, ob die Leute meinen Fehler ignoriert haben. Danke für den Kommentar.
Nikolas
4

Der Vorteil ist Dependency Injection (DI) . Es bedeutet, die Aufgabe der Objekterstellung auszulagern. Lassen Sie mich dies anhand eines Beispiels erklären.

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

Jetzt habe ich in meinem Code eine Klasse LunchDecide wie folgt:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

In der obigen Klasse wählen wir je nach Stimmung Buffet () oder Plated (). Dieses System ist jedoch eng gekoppelt. Jedes Mal, wenn wir einen anderen Objekttyp benötigen, müssen wir den Code ändern. In diesem Fall eine Zeile auskommentieren! Stellen Sie sich vor, es gibt 50 verschiedene Klassen, die von 50 verschiedenen Personen verwendet werden. Es wäre ein verdammt großes Durcheinander. In diesem Fall müssen wir das System entkoppeln. Lassen Sie uns die LunchDecide-Klasse neu schreiben.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

Beachten Sie, dass wir anstelle eines Objekts mit einem neuen Schlüsselwort den Verweis auf ein Objekt vom Typ Lunch Type als Parameter an unseren Konstruktor übergeben haben. Hier wird die Objekterstellung ausgelagert. Dieser Code kann entweder mit einer XML-Konfigurationsdatei (Legacy) oder mit Java Annotations (Modern) verkabelt werden. In beiden Fällen wird dort zur Laufzeit entschieden, welcher Objekttyp erstellt werden soll. Ein Objekt würde von Xml in unseren Code eingefügt - Unser Code ist für diesen Job von Xml abhängig. Daher Abhängigkeitsinjektion (DI). DI hilft nicht nur dabei, unser System lose zu koppeln, sondern vereinfacht auch das Schreiben von Unit-Tests, da Abhängigkeiten verspottet werden können. Last but not least optimiert DI die aspektorientierte Programmierung (AOP), was zu einer weiteren Entkopplung und Erhöhung der Modularität führt. Beachten Sie auch, dass über DI die Konstruktorinjektion steht.

Sumit Pokhrel
quelle
Aber selbst im Falle des Frühlings würden wir immer noch Bohnen definieren. und die Bean-ID wird im Code angegeben, nicht wahr? Wenn Sie also morgen die Bean ändern, müssen Sie den Code trotzdem ändern, nicht wahr? Also, was ist der Vorteil.
Arpan Buch
@ArpanBuch Ich denke, der Vorteil von Spring ist, dass Sie eine andere Implementierung auswählen können, ohne Code neu zu kompilieren (solange die andere Implementierung bereits vorhanden ist). Ich bin ein Anfänger, also könnte ich mich irren.
Byxor
4
  • Spring ist im Vergleich zu J2EE ein leichtes und flexibles Framework.
  • Federbehälter wirken als Umkehrung der Kontrolle.
  • Spring verwendet AOP, dh Proxys und Singleton-, Factory- und Template Method Design-Muster.
  • Abgestufte Architekturen: Trennung von Bedenken und wiederverwendbaren Schichten und einfache Wartung.

Geben Sie hier die Bildbeschreibung ein

Premraj
quelle
1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
Tomj0101
3

Spring ist eine gute Alternative zur Enterprise JavaBeans (EJB) -Technologie. Es hat auch Web-Framework und Web-Services-Framework-Komponente.

fastcodejava
quelle
1
Kann ich korrigieren? War eine Alternative zu (schrecklichem) EJB 2 ... scheint "neues EJB" (teilweise JPA 2 usw.) hat groovende Akzeptanz. "Happy Hours" des Frühlingsteils "eine Art EJB" scheinen vorbei zu sein. Anzeige 2015
Jacek Cz
1

Spring begann als ein ziemlich einfaches Abhängigkeitsinjektionssystem. Jetzt ist es riesig und hat alles drin (außer dem sprichwörtlichen Spülbecken).

Aber keine Angst, es ist ziemlich modular, so dass Sie genau die Teile verwenden können, die Sie wollen.

Um zu sehen, wo alles begann, versuchen Sie:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

Es mag alt sein, aber es ist ein ausgezeichnetes Buch.

Für ein weiteres gutes Buch, das diesmal ausschließlich dem Frühling gewidmet ist, siehe:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

Es verweist auch auf ältere Versionen von Spring, ist aber definitiv einen Blick wert.

Pablojim
quelle
1

Der Frühling war am Anfang eine Abhängigkeitsinjektion, dann füge King of Wrapper für fast alles hinzu (Wrapper über JPA-Implementierungen usw.).

Lange Geschichte ... die meisten Teile von Spring bevorzugen XML-Lösungen (XML Scripting Engine ... brrrr), daher verwende ich für DI Guice

Gute Bibliothek, aber mit wachsender Abhängigkeit, zum Beispiel Frühling JDBC (vielleicht eine Java-JDBC-Lösung mit Real-Names-Parametern) als nächstes von Maven 4-5.

Mit Spring MVC (Teil von "Big Spring") für die Webentwicklung ... es ist ein "anforderungsbasiertes" Framework, es gibt "Anfrage gegen Komponente" des Heiligen Krieges ... bis zu Ihnen

Jacek Cz
quelle
1
Ich glaube, jetzt versucht Spring Framework, von XML zu Annotations und Java-Konfiguration überzugehen.
Maksim
0

In der Vergangenheit habe ich aus rein technischer Sicht über Spring Framework nachgedacht.

Angesichts einiger Erfahrungen mit Teamarbeit und der Entwicklung von Unternehmens-Webapps würde ich sagen, dass Spring eine schnellere Entwicklung von Anwendungen (Webanwendungen) durch Entkopplung der einzelnen Elemente (Beans) ermöglicht. Eine schnellere Entwicklung macht es so beliebt. Mit Spring können Sie die Verantwortung für den Aufbau (die Verkabelung) der Anwendung auf das Spring-Framework übertragen. Die Abhängigkeitsinjektion des Spring-Frameworks ist für das Verbinden / Verdrahten einzelner Beans mit einer funktionierenden Anwendung verantwortlich.

Auf diese Weise können sich Entwickler mehr auf die Entwicklung einzelner Komponenten (Beans) konzentrieren, sobald Schnittstellen zwischen Beans definiert sind.

Das Testen einer solchen Anwendung ist einfach - der Hauptfokus liegt auf einzelnen Bohnen. Sie können leicht entkoppelt und verspottet werden, sodass Unit-Tests schnell und effizient sind.

Das Spring Framework definiert mehrere spezialisierte Beans wie @Controller ( @Restcontroller ), @Repository , @Component , um Webzwecken zu dienen. Spring bietet zusammen mit Maven eine Struktur, die für Entwickler intuitiv ist. Teamarbeit ist einfach und schnell, da einzelne Elemente getrennt bleiben und wiederverwendet werden können.

Witold Kaczurba
quelle
0

Spring Framework ist definitiv gut für die Webentwicklung und genauer für erholsame API-Dienste.

Es ist gut für die oben wegen seiner Dependency Injection und die Integration mit anderen Modulen wie Feder Sicherheit , Frühling AOP , MVC - Framework , Microservice

Bei jeder Anwendung ist Sicherheit höchstwahrscheinlich eine Voraussetzung.
Wenn Sie ein Produkt bauen möchten, das lange gewartet werden muss, müssen Sie das Aop-Konzept verwenden.

Wenn Ihre Anwendung zu viel Verkehr hat und somit die Last erhöht, müssen Sie das Microservices-Konzept verwenden.

Spring bietet all diese Funktionen auf einer Plattform. Unterstützung mit vielen Modulen .
Am wichtigsten ist, dass Spring Open Source und ein erweiterbares Framework ist und überall einen Haken hat, um benutzerdefinierten Code in den Lebenszyklus zu integrieren.

Spring Data ist ein Projekt, das die Integration in Ihr Projekt ermöglicht.


So kann die Feder in nahezu jede Anforderung passen.

pratik deshai
quelle