[java] Per cosa è esattamente il Framework di primavera?



Answers

La primavera contiene ( come ha giustamente sottolineato Skaffman ) una struttura MVC. Per spiegare in breve ecco i miei input. Spring supporta la segregazione del livello di servizio, del livello Web e del livello aziendale, ma ciò che realmente fa meglio è "l'iniezione" di oggetti. Quindi per spiegare che con un esempio si consideri l'esempio di seguito:

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
   }
}

Ora nel tuo codice hai una classe chiamata RoadTrip come segue

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Ora ogni volta che vuoi un'istanza di Trip; a volte potresti volere un SUV per inizializzare FourWheel o, a volte, potresti voler berlina. Dipende molto da ciò che vuoi in base alla situazione specifica.

Per risolvere questo problema, si vorrebbe avere un modello di fabbrica come modello creativo. Dove una fabbrica restituisce l'istanza giusta. Quindi alla fine ti ritroverai con un sacco di codice di colla solo per istanziare correttamente gli oggetti. Spring fa il lavoro del codice colla migliore senza quel codice colla. Si dichiarano i mapping in XML e vengono inizializzati automaticamente gli oggetti. Fa anche molto usando l'architettura singleton per le istanze e questo aiuta nell'ottimizzazione dell'uso della memoria.

Questo è anche chiamato Inversion Of Control. Altri framework per fare questo sono Google guice, Pico container ecc.

Oltre a questo, Spring ha framework di validazione, ampio supporto per layer DAO in collaborazione con JDBC, iBatis e Hibernate (e molti altri). Fornisce un eccellente controllo transazionale sulle transazioni del database.

C'è molto di più in primavera che può essere letto in buoni libri come "Pro Spring".

Anche gli URL seguenti potrebbero essere di aiuto.
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

Ho sentito parlare molto di Spring , la gente dice in tutto il web che Spring è un buon framework per lo sviluppo web. Per cosa è esattamente il Framework di primavera? Come posso usarlo per lo sviluppo di applicazioni Web-Java? qualche esempio?




In passato pensavo alla struttura di Spring dal punto di vista puramente tecnico.

Data una certa esperienza nel lavoro di squadra e nello sviluppo di applicazioni Web aziendali, direi che Spring è per lo sviluppo più rapido di applicazioni (applicazioni web) disaccoppiando i suoi singoli elementi (bean). Lo sviluppo più veloce lo rende così popolare. La primavera consente di spostare la responsabilità di costruire (cablare) l'applicazione sul framework Spring. L' iniezione di dipendenza del framework Spring è responsabile della connessione / cablaggio di singoli bean in un'applicazione funzionante.

In questo modo gli sviluppatori possono concentrarsi maggiormente sullo sviluppo di singoli componenti (bean) non appena vengono definite le interfacce tra i bean.

Testare un'applicazione di questo tipo è facile: l'obiettivo principale è dato ai singoli fagioli. Possono essere facilmente disaccoppiati e derisi, quindi i test unitari sono rapidi ed efficienti.

Il framework Spring definisce più bean specializzati come @Controller ( @Restcontroller ), @Repository , @Component per scopi web. Spring insieme a Maven forniscono una struttura intuitiva per gli sviluppatori. Il lavoro di squadra è facile e veloce poiché i singoli elementi vengono tenuti separati e possono essere riutilizzati.




La primavera è stata un'iniezione di dipendenza all'inizio, quindi aggiungere re di wrapper per quasi tutto (wrapper su implementazioni JPA, ecc.).

Lunga storia ... gran parte delle soluzioni XML di Spring preffer (motore di scripting XML ... brrrr), quindi per DI uso Guice

Una buona libreria, ma con la crescente depnedenciec, ad esempio Spring JDBC (forse una soluzione jdbc Java con parametri di nomi reali) prende da Maven 4-5 in seguito.

Usando Spring MVC (parte di "big spring") per lo sviluppo web ... è un framework "request based", c'è una guerra santa "request vs component" ... fino a te




Spring è una buona alternativa alla tecnologia EJB (Enterprise JavaBeans) . Ha anche componenti del framework web e dei servizi web.




Il vantaggio è Dipendenza Iniezione (DI) . Significa esternalizzare il compito di creazione dell'oggetto. Mi spiego con un esempio.

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
   }
}

Ora nel mio codice ho una classe LunchDecide come segue:

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 
    }
}

Nella classe sopra, a seconda del nostro umore, selezioniamo Buffet () o Placcato (). Tuttavia questo sistema è strettamente accoppiato. Ogni volta che abbiamo bisogno di un diverso tipo di oggetto, dobbiamo cambiare il codice. In questo caso, commentando una riga! Immagina che ci siano 50 diverse classi usate da 50 persone diverse. Sarebbe un gran casino. In questo caso, abbiamo bisogno di disaccoppiare il sistema. Riscriviamo la classe LunchDecide.

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

Si noti che invece di creare un oggetto usando una nuova parola chiave abbiamo passato il riferimento a un oggetto di tipo Pranzo come parametro al nostro costruttore. Qui, la creazione dell'oggetto è esternalizzata. Questo codice può essere cablato utilizzando il file di configurazione Xml (legacy) o Java Annotations (moderno). In entrambi i casi, la decisione su quale tipo di oggetto verrebbe creata verrà eseguita lì durante il runtime. Un oggetto sarebbe iniettato da Xml nel nostro codice - Il nostro codice dipende da Xml per quel lavoro. Quindi, Dipendenza iniezione (DI). Il DI non solo aiuta a rendere il nostro sistema liberamente accoppiato, semplifica la scrittura dei test di Unità poiché permette alle dipendenze di essere derisi. Ultimo ma non meno importante, DI semplifica la programmazione orientata agli aspetti (AOP) che porta a un ulteriore disaccoppiamento e aumento della modularità. Si noti inoltre che sopra DI è Costruttore Iniezione. DI può essere fatto anche con Setter Injection - lo stesso semplice metodo setter da incapsulamento.




Vedo due parti per questo:

  1. "Che cosa è esattamente Spring per" -> vedere la risposta accettata da Victor Hugo.
  2. "[...] La primavera è [un] buon framework per lo sviluppo del web" -> persone che dicono che stanno parlando di Spring MVC. Spring MVC è una delle tante parti di Spring, ed è un framework web che sfrutta le caratteristiche generali di Spring, come l'iniezione di dipendenza. È un framework piuttosto generico in quanto è molto configurabile: puoi usare diversi livelli db (Hibernate, iBatis, plain JDBC), diversi livelli di visualizzazione (JSP, Velocity, Freemarker ...)

Nota che puoi usare perfettamente Spring in un'applicazione web senza usare Spring MVC. Direi che la maggior parte delle applicazioni web Java fa questo, mentre usa altri framework web come Wicket, Struts, Seam, ...




I vecchi tempi, la primavera era un lavoro a iniezione dipendente come ( Guice , PicoContainer , ...), ma ora un giorno è una soluzione totale per costruire un'applicazione Enterprise .

L'iniezione di dipendenza primaverile, che è ovviamente il cuore della primavera, è ancora lì (e puoi rivedere altre buone risposte qui), ma ce ne sono di più dalla primavera ....

Spring ha ora molti progetti, ognuno con alcuni sottoprogetti ( http://spring.io/projects ). Quando qualcuno parla della primavera, devi scoprire quale progetto di primavera sta parlando, è solo il nucleo primaverile, che è noto come quadro di primavera , oppure sono altri progetti primaverili.

Alcuni progetti di primavera che vale la pena menzionare sono:

Se hai bisogno di qualche funzione specifica per la tua applicazione, potresti trovarla anche lì:

  • struttura batch batch di primavera progettata per consentire lo sviluppo di
    applicazione batch
  • primavera HATEOAS facile creazione della base di api REST sul principale di HATEOAS
  • molla mobile e molla per lo sviluppo di applicazioni mobili
  • spring shell costruisce un'applicazione shell (anche nota da riga di comando) completa
  • flusso di dati cloud di primavera e nuvole primaverili per applicazioni cloud

Ci sono anche alcuni piccoli progetti per esempio spring-social-facebook ( http://projects.spring.io/spring-social-facebook/ )

È possibile utilizzare Spring per lo sviluppo Web in quanto ha il modulo Spring MVC che fa parte del progetto del framework di primavera . Oppure puoi usare la molla con un altro fotogramma web, come i puntoni2 .




La primavera è tre cose.

  1. Le maniglie di primavera Dipendenza da iniezione e vi consiglio di leggere l'eccellente introduzione di Martin Fowler sull'iniezione di dipendenza.
  2. La seconda cosa che Spring fa è racchiudere eccellenti librerie Java in un modo molto elegante da usare nelle tue applicazioni. Per un buon esempio, vedere come Spring esegue il wrapping dei Task Executors e del Quartz Scheduler.
  3. In terzo luogo, Spring fornisce una serie di implementazioni di elementi web come REST, un framework Web MVC e altro ancora. Capiscono dal momento che stai usando Spring per i primi due, forse puoi semplicemente usarlo per tutto ciò di cui la tua app web ha bisogno.

Il problema è che Spring DI è davvero ben congegnata, i wrapper attorno ad altre cose sono davvero ben pensati in quanto le altre cose hanno pensato a tutto e Spring lo avvolge piacevolmente. Le implementazioni Spring di MVC e REST e tutte le altre cose non sono altrettanto ben fatte (YMMV, IMHO) ma ci sono delle eccezioni (Spring Security è da bomba). Quindi tendo a usare Spring per DI, e i suoi involucri freddi ma preferisco altre cose per il Web (mi piace molto Tapestry), REST (Jersey è davvero robusto), ecc.




Related