[Java] Wofür genau ist Spring Framework?


Answers

Der Frühling enthält ( wie Skaffman zu Recht betonte ) einen MVC-Rahmen. Um kurz zu erklären, hier sind meine Eingaben. Spring unterstützt die Trennung von Service-Layer, Web-Layer und Business-Layer, aber was es am besten macht, ist die "Injektion" von Objekten. Um das 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 in Ihrem Code haben Sie eine Klasse namens RoadTrip wie folgt

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Jetzt wann immer du eine Instanz von Trip willst; Manchmal möchten Sie vielleicht ein SUV, um FourWheel zu initialisieren, oder manchmal möchten Sie Sedan. Es hängt wirklich davon ab, was Sie aufgrund der spezifischen Situation wollen.

Um dieses Problem zu lösen, möchten Sie ein Factory Pattern als kreatives Muster haben. Wo eine Fabrik die richtige Instanz zurückgibt. So werden Sie am Ende mit viel Klebstoff-Code enden, nur um Objekte korrekt zu instanziieren. Frühling macht die Arbeit des Klebstoffs am besten ohne diesen Klebstoffcode. Sie deklarieren Zuordnungen in XML und initialisieren die Objekte automatisch. Es tut auch viel mit Singleton-Architektur für Instanzen und das hilft bei der optimierten Speicherauslastung.

Dies wird auch Inversion Of Control genannt. Andere Frameworks, die dies tun, sind Google Guice, Pico Container usw.

Abgesehen davon hat Spring Validierungs-Framework, umfangreiche Unterstützung für DAO-Layer in Zusammenarbeit mit JDBC, iBatis und Hibernate (und viele mehr). Bietet hervorragende Transaktionssteuerung für Datenbanktransaktionen.

Spring hat noch viel mehr zu bieten, was man in guten Büchern wie "Pro Spring" nachlesen kann.

Folgende 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

Question

Ich höre viel über Spring , die Leute sagen überall im Internet, dass Spring ein guter Rahmen für die Webentwicklung ist. Wofür genau ist Spring Framework? Wie kann ich es für meine Web-Java-Anwendungsentwicklung verwenden? irgendwelche Beispiele?




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

Mit etwas Erfahrung in der Teamarbeit und der Entwicklung von Enterprise Webapps - ich würde sagen, dass Spring für die schnellere Entwicklung von Anwendungen (Web-Anwendungen) durch die Entkopplung seiner einzelnen Elemente (Beans) ist. Schnellere Entwicklung macht es so beliebt. Spring ermöglicht die Verlagerung der Verantwortung für die Erstellung (Verkabelung) der Anwendung auf das Spring-Framework. Die Abhängigkeitsinjektion des Spring-Frameworks ist für das Verbinden / Verdrahten einzelner Beans in eine funktionierende Anwendung verantwortlich.

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

Das Testen solcher Anwendungen ist einfach - der Hauptfokus liegt auf einzelnen Bohnen. Sie können leicht entkoppelt und verspottet werden, so dass das Komponententesten schnell und effizient ist.

Spring Framework definiert mehrere spezialisierte Beans wie @Controller ( @Restcontroller ), @Repository , @Component , um Web-Zwecken zu dienen. Spring zusammen mit Maven bieten eine Struktur, die für Entwickler intuitiv ist. Teamarbeit ist einfach und schnell, da einzelne Elemente auseinander gehalten und wiederverwendet werden können.




Spring war am Anfang die Abhängigkeitsinjektion, dann fügen Sie für fast alles den König der Wrapper hinzu (Wrapper über JPA-Implementierungen usw.).

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

Gute Bibliothek, aber mit wachsenden depnedenciec, zum Beispiel Spring JDBC (vielleicht eine Java jdbc Lösung mit realen Namen Parameter) nehmen Sie von Maven 4-5 als nächstes.

Mit Spring MVC (Teil von "big spring") für Web-Entwicklung ... es ist "Anfrage basiert" Rahmen, es ist heilig Krieg "Anfrage vs Komponente" ... bis zu Ihnen




Der Frühling ist drei Dinge.

  1. Spring behandelt Dependency Injection und ich empfehle Ihnen, Martin Fowlers exzellente Einführung in die Abhängigkeitsinjektion zu lesen.
  2. Die zweite Sache, die Spring macht, ist das Einbinden exzellenter Java-Bibliotheken auf sehr elegante Weise, um sie in Ihren Anwendungen zu verwenden. Ein gutes Beispiel zeigt, wie Spring Task Executors und Quartz Scheduler umschließt.
  3. Drittens bietet Spring eine Reihe von Web-Implementierungen wie REST, ein MVC-Web-Framework und mehr. Sie denken, da Sie Spring für die ersten beiden verwenden, vielleicht können Sie es einfach für alles verwenden, was Ihre Web-App braucht.

Das Problem ist, dass Spring DI wirklich gut durchdacht ist, die Wrapper um andere Dinge sind wirklich gut durchdacht, da die anderen Dinge alles durchdacht haben und Spring es einfach schön umhüllt. Die Spring-Implementierungen von MVC und REST und all die anderen Dinge sind nicht so gut (YMMV, IMHO), aber es gibt Ausnahmen (Spring Security ist da Bombe). Daher verwende ich Spring für DI und seine coolen Wrapper, aber bevorzuge andere Sachen für das Web (ich mag Tapestry sehr), REST (Jersey ist wirklich robust) usw.




Der Vorteil ist Dependency Injection (DI) . Es bedeutet Outsourcing der Aufgabe der Objekterzeugung. Lassen Sie mich mit einem Beispiel 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 in meinem Code habe ich 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 abhängig von unserer 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 Leuten benutzt werden. Es wäre eine höllische Sauerei. In diesem Fall müssen wir das System entkoppeln. Lass uns die LunchDecide-Klasse umschreiben.

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

Beachten Sie, dass wir anstelle eines Objekts, das ein neues Schlüsselwort verwendet, den Verweis auf ein Objekt von Lunch Type als Parameter für unseren Konstruktor übergeben haben. Hier wird die Objekterstellung ausgelagert. Dieser Code kann entweder mit Xml-Konfigurationsdatei (Legacy) oder Java-Annotationen (Modern) verdrahtet werden. In beiden Fällen würde die Entscheidung darüber, welcher Objekttyp erstellt würde, dort zur Laufzeit erfolgen. Ein Objekt würde von Xml in unseren Code injiziert werden - Unser Code ist für diesen Job von Xml abhängig. Daher Dependency Injection (DI). DI trägt nicht nur dazu bei, unser System lose gekoppelt zu machen, es vereinfacht auch das Schreiben von Komponententests, da Abhängigkeiten gespottet werden können. Zu guter Letzt optimiert DI die aspektorientierte Programmierung (AOP), die zu einer weiteren Entkopplung und Erhöhung der Modularität führt. Beachten Sie auch, dass oben DI Constructor Injection ist. DI kann auch mit Setter Injection durchgeführt werden - gleiche Plain Old Setter Methode von Encapsulation.




Früher war der Frühling ein Abhängigkeits-Injektionsrahmen, der nur funktioniert ( Guice , PicoContainer , ...), aber jetzt ist es eine totale Lösung für den Aufbau Ihrer Enterprise Application .

Die Frühlingsabhängigkeits-Injektion, 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 mehr vom Frühling ....

Frühling hat jetzt viele Projekte, jedes mit einigen Unterprojekten ( http://spring.io/projects ). Wenn jemand über den Frühling spricht, müssen Sie herausfinden, über welches Frühlingsprojekt er spricht, ist es nur Federkern, der als Federrahmen bekannt ist , oder es ist ein anderer Frühling Projekte.

Einige Frühlingsprojekte, die zu erwähnen sind, sind:

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

  • Spring - Batch - Batch - Framework entwickelt, um die Entwicklung von
    Batch-Anwendung
  • Frühling HATEOAS einfache Erstellung von REST API Basis auf HATEOAS Principal
  • Feder Mobile und Spring Andriod für mobile Anwendungsentwicklung
  • Spring Shell erstellt eine vollständige Shell (auch Befehlszeile genannt) Anwendung
  • Quellwolke und Quellwolken-Datenfluss für Cloud-Anwendungen

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

Sie können Feder für Web-Entwicklung verwenden, da es das Spring MVC Modul hat, das Teil des Spring MVC ist. Oder Sie können Feder mit einem anderen Web Frame arbeiten, wie Struts2 .




Ich sehe zwei Teile dazu:

  1. "Was genau ist Frühling für" -> siehe die angenommene Antwort von Victor Hugo.
  2. "[...] Der Frühling ist [ein] guter Rahmen für die Webentwicklung" -> Leute, die das sagen, sprechen über Spring MVC. Spring MVC ist einer der vielen Teile von Spring und ist ein Web-Framework, das die allgemeinen Merkmale von Spring nutzt, wie die Abhängigkeitsinjektion. Es ist ein ziemlich generisches Framework in dem es sehr konfigurierbar ist: Sie können verschiedene db Schichten (Hibernate, iBatis, plain JDBC), 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, ... verwenden.




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