A cosa serve esattamente Spring Framework? [chiuso]


Ho sentito parlare molto di Spring , la gente sta dicendo in tutto il web che Spring è un buon framework per lo sviluppo web. A cosa serve esattamente Spring Framework?

Author: xxxxxxxxxxx, 2009-06-30

17 answers

Fondamentalmente Spring è un framework per dependency-injection che è un modello che consente di costruire sistemi molto disaccoppiati.

Il problema

Ad esempio, supponiamo di dover elencare gli utenti del sistema e quindi dichiarare un'interfaccia chiamata UserLister:

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

E forse un'implementazione che accede a un database per ottenere tutti gli utenti:

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

Nella tua vista dovrai accedere a un'istanza (solo un esempio, ricorda):

public class SomeView {
    private UserLister userLister;

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

Nota che il codice sopra non ha inizializzato la variabile userLister. Cosa dovremmo fare? Se instanzierò esplicitamente l'oggetto in questo modo:

UserLister userLister = new UserListerDB();

...Accoppierei la vista con la mia implementazione della classe che accede al DB. Cosa succede se voglio passare dall'implementazione DB a un'altra che ottiene l'elenco degli utenti da un file separato da virgole (ricorda, è un esempio)? In tal caso andrei di nuovo al mio codice e cambierei l'ultima riga di:

UserLister userLister = new UserListerCommaSeparatedFile();

Questo non ha alcun problema con un piccolo programma come questo ma... Cosa succede in un programma che ha centinaia di visualizzazioni e un numero simile di business class. La manutenzione diventa un incubo!

Approccio Spring (Dependency Injection)

Ciò che Spring fa è legare le classi usando un file XML o annotazioni, in questo modo tutti gli oggetti vengono istanziati e inizializzati da Spring e iniettato nei posti giusti (Servlet, Framework Web, Business class, DAO, ecc, ecc, ecc...).

Tornando all'esempio in primavera abbiamo solo bisogno di avere un setter per il campo userLister e avere un file XML come questo:

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

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

O più semplicemente annotare il archiviato nella nostra classe view con @Inject:

@Inject
private UserLister userLister;

In questo modo quando viene creata la vista, magicamente avrà un UserLister pronto per funzionare.

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

È fantastico! Vero?

  • Cosa succede se si desidera utilizzare un'altra implementazione dell'interfaccia UserLister? Solo modificare l'XML
  • Cosa succede se non hai un'implementazione UserLister pronta? Programma un'implementazione simulata temporale di UserLister e facilita lo sviluppo della vista
  • Cosa succede se non voglio più usare Spring? Basta non usarlo! La tua applicazione non è accoppiata ad essa. Inversione del controllo afferma: "L'applicazione controlla il framework, non il framework controlla l'applicazione".

Ci sono alcune altre opzioni per la dipendenza Iniezione lì intorno, ciò che a mio parere ha reso Spring così famoso oltre alla sua semplicità, eleganza e stabilità è che i ragazzi di SpringSource hanno programmato molti molti POJO che aiutano a integrare Spring con molti altri framework comuni senza essere invadenti nella tua applicazione. Anche Spring ha diversi buoni sottoprogetti come Spring MVC, Spring WebFlow, Spring Security e ancora una lunga lista di etceteras.

Spero che questo aiuti. Comunque, vi incoraggio a leggere Martin L'articolo di Fowler sull'iniezione di dipendenza e l'inversione del controllo perché lo fa meglio di me. Dopo aver compreso le basi dai un'occhiata alla documentazione di Spring, secondo me è era il miglior libro di primavera di sempre.

 624
Author: victor hugo, 2018-06-22 00:44:24

Primavera contiene (come ha giustamente sottolineato Skaffman) un framework 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 fa davvero meglio è l ' "iniezione" di oggetti. Quindi, per spiegare che con un esempio considera l'esempio seguente:

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, talvolta, si consiglia Berlina. Dipende davvero da cosa 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 finirai con un sacco di codice di colla solo per istanziare correttamente gli oggetti. Spring fa il lavoro del codice colla meglio senza quel codice colla. Si dichiarano i mapping in XML e si inizializzano automaticamente gli oggetti. Lo fa anche molto utilizzando l'architettura singleton per le istanze e questo aiuta a ottimizzare l'utilizzo della memoria.

Questo è anche chiamato Inversione di controllo. Altri framework per farlo sono Google guice, Pico container ecc.

Oltre a questo, Spring ha un framework di convalida, un ampio supporto per il livello 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".

Seguente Url può essere di aiuto too.
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

 56
Author: Priyank, 2014-12-16 09:03:41

Vecchi tempi, spring era un frame di iniezione di dipendenza che funzionava solo come (Guice, PicoContainer,...), ma ora un giorno una soluzione totale per costruirti Applicazione Aziendale .

La spring dependency injection, che è ovviamente il cuore della primavera, è ancora lì (e puoi rivedere altre buone risposte qui), ma ce ne sono altre dalla primavera ....

Spring ora ha molti progetti, ognuno con alcuni sotto progetti ( http://spring.io/projects) . Quando qualcuno parla di primavera, è necessario scoprire che cosa spring project sta parlando, è solo nucleo di primavera, che è noto come spring framework , o è un altro progetti di primavera.

Alcuni progetti primaverili che meritano di essere menzionati sono:

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

  • spring batch framework batch progettato per consentire lo sviluppo di
    applicazione batch
  • primavera HATEOAS facile creazione di base api REST su HATEOAS principal
  • primavera mobile e spring andriod per lo sviluppo di applicazioni mobili
  • spring shell crea un'applicazione shell completa (aka riga di comando)
  • spring cloud e spring cloud data flow per applicazioni cloud

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

Puoi usare spring per lo sviluppo web come ha il modulo Spring MVC che fa parte del progetto spring framework . Oppure puoi usare spring con un altro lavoro di frame web, come struts2 .

 28
Author: Alireza Fattahi, 2016-05-04 05:34:58

A cosa serve la primavera? Risponderò a questa domanda a breve, ma prima, diamo un'altra occhiata all'esempio di Victor hugo. Non è un grande esempio perché non giustifica la necessità di un nuovo framework.

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

Fatto! Quindi ora anche se hai centinaia o migliaia di visualizzazioni, devi solo cambiare una riga di codice, come nell'approccio XML di primavera. Ma cambiare una riga di codice richiede ancora la ricompilazione invece di modificare XML che dici? Bene il mio amico pignolo, usa la formica e script via!

Allora, a cosa serve la primavera? È per:

  1. Sviluppatori ciechi che seguono la mandria
  2. I datori di lavoro che non vogliono mai assumere programmatori laureati perché non insegnano tali quadri a Uni
  3. Progetti che hanno iniziato con un cattivo design e hanno bisogno di patchwork (come mostrato dall'esempio di Victor hugo)

Ulteriori letture: http://discuss.joelonsoftware.com/?joel.3.219431.12

 24
Author: Ash, 2015-06-03 02:14:33

Molto breve riassunto, dirò che la primavera è la "colla" nella tua applicazione. Viene utilizzato per integrare diversi framework e il proprio codice.

 18
Author: Johan, 2010-04-29 15:33:55

La primavera è tre cose.

  1. Spring gestisce l'iniezione di dipendenza e ti consiglio di leggere l'eccellente introduzione di Martin Fowler sull'iniezione di dipendenza.
  2. La seconda cosa che Spring fa è avvolgere eccellenti librerie Java in un modo molto elegante da usare nelle tue applicazioni. Per un buon esempio, vedi come Spring avvolge gli esecutori delle attività e lo Scheduler Quartz.
  3. In terzo luogo Spring fornisce una serie di implementazioni di cose web come REST, un framework Web MVC e altro ancora. Essi dato che stai usando Spring per i primi due, forse puoi semplicemente usarlo per tutto ciò di cui ha bisogno la tua app web.

Il problema è che Spring DI è davvero ben pensato, gli involucri intorno ad altre cose sono davvero ben pensati in quanto le altre cose hanno pensato 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 bomb). Quindi io tendono ad usare Spring per DI e i suoi fantastici wrapper, ma preferiscono altre cose per il Web (mi piace molto l'arazzo), il RIPOSO (la maglia è davvero robusta), ecc.

 13
Author: karstensrage, 2014-12-16 09:10:02

Quello che probabilmente vorresti in un'applicazione web con Spring -

  • Spring MVC, che con 2.5+ consente di utilizzare POJO come classi di controller, il che significa che non è necessario estendere da alcun framework particolare (come in Struts o Spring pre-2.5). Le classi di controller sono anche semplici da testare grazie in parte all'iniezione di dipendenza
  • Integrazione Spring con Hibernate, che fa un buon lavoro nel semplificare il lavoro con quella soluzione ORM (per la maggior parte dei casi)
  • Utilizzo della molla per un'app Web consente di utilizzare gli oggetti di dominio a tutti i livelli dell'applicazione: le stesse classi mappate utilizzando Hibernate sono le classi utilizzate come "form bean"."Per natura, questo porterà a un modello di dominio più robusto, in parte perché ridurrà il numero di classi.
  • I tag Spring form semplificano la creazione di moduli senza troppi problemi.

Inoltre, la primavera è ENORME-quindi ci sono molte altre cose che potresti essere interessato a usare in a web app come Spring AOP o Spring Security. Ma le quattro cose elencate sopra descrivono i componenti comuni di Spring che vengono utilizzati in un'app web.

 11
Author: bpapa, 2009-06-30 21:35:18

Vedo due parti di questo:

  1. "A cosa serve esattamente la primavera" -> vedi la risposta accettata da victor hugo.
  2. "[...] Spring è [un] buon framework per lo sviluppo web " - > le persone che dicono questo stanno parlando di Spring MVC. Spring MVC è una delle tante parti di Spring ed è un framework web che utilizza le caratteristiche generali di Spring, come l'iniezione di dipendenza. È un framework piuttosto generico in quanto è molto configurabile: è possibile utilizzare diversi livelli db (Hibernate, iBatis, semplice JDBC), diversi livelli di visualizzazione (JSP, Velocità, Freemarker...)

Si noti che è possibile utilizzare perfettamente Spring in un'applicazione Web senza utilizzare Spring MVC. Direi che la maggior parte delle applicazioni Web Java lo fa, mentre utilizza altri framework web come Wicket, Struts, Seam, ...

 8
Author: Tom De Leu, 2012-01-10 07:55:37

Spring è ottimo per incollare istanze di classi insieme. Sai che le tue classi di ibernazione avranno sempre bisogno di un'origine dati, Spring le collega insieme (e ha anche un'implementazione dell'origine dati).

I tuoi oggetti di accesso ai dati avranno sempre bisogno dell'accesso Hibernate, Spring collega le classi Hibernate ai tuoi DAO per te.

Inoltre, Spring ti offre fondamentalmente configurazioni solide di un gruppo di librerie e, in questo, ti dà una guida su quali librerie dovrebbe usare.

La primavera è davvero un ottimo strumento. (Non stavo parlando di Spring MVC, solo del framework di base).

 7
Author: stevedbrown, 2014-12-16 09:07:39

La risposta accettata non comporta l'utilizzo delle annotazioni poiché Spring ha introdotto il supporto per varie annotazioni per la configurazione.

Approccio Spring (Dependency Injection)

C'è un altro modo per collegare le classi insieme usando un file XML: le annotazioni. Usiamo l'esempio della risposta accettata e registriamo il bean direttamente sulla classe usando una delle annotazioni @Component, @Service, @Repository oppure @Configuration:

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

In questo modo quando la vista è creato magicamente avrà un UserLister pronto a lavorare.

L'istruzione di cui sopra è valida con un piccolo bonus senza bisogno di alcun utilizzo di file XML e cablaggio con un'altra annotazione @Autowired che trova un'implementazione pertinente e la inserisce.

@Autowired
private UserLister userLister;

Utilizzare l'annotazione @Bean su un metodo utilizzato per ottenere l'implementazione del bean da iniettare.

 5
Author: Nikolas, 2018-05-17 22:05:45

Il vantaggio è Dependency Injection (DI). Significa esternalizzare il compito di creazione di oggetti.Lasciatemi spiegare 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 di cui sopra, a seconda del nostro umore, scegliamo Buffet() o Placcato(). Tuttavia questo sistema è strettamente accoppiato. Ogni volta che abbiamo bisogno di un diverso tipo di oggetto, abbiamo bisogno di cambiare il codice. In questo caso, commentando una linea ! Immagina che ci siano 50 classi diverse utilizzato da 50 persone diverse. Sarebbe un gran casino. In questo caso, dobbiamo disaccoppiare il sistema. Riscriviamo la lezione di pranzo.

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

Si noti che invece di creare un oggetto usando new keyword abbiamo passato il riferimento a un oggetto di tipo Lunch come parametro al nostro costruttore. Qui, la creazione di oggetti viene esternalizzata. Questo codice può essere cablato utilizzando il file di configurazione Xml (legacy) o le annotazioni Java (modern). In entrambi i casi, la decisione su quale tipo di oggetto sarebbe creato sarebbe stato fatto lì durante il runtime. Un oggetto verrebbe iniettato da Xml nel nostro codice-Il nostro codice dipende da Xml per quel lavoro. Quindi, Dependency Injection (DI). DI non solo aiuta a rendere il nostro sistema liberamente accoppiato, semplifica la scrittura dei test unitari poiché consente di deridere le dipendenze. 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 è l'iniezione del costruttore. DI può essere fatto anche con l'iniezione di Setter - lo stesso semplice vecchio metodo di setter dall'incapsulamento.

 4
Author: Sumit Pokhrel, 2017-09-17 18:07:04

Spring è una buona alternativa alla tecnologia Enterprise JavaBeans (EJB) . Ha anche web framework e web services framework componente.

 3
Author: fastcodejava, 2010-02-12 02:00:45

Spring è iniziato come un sistema di iniezione di dipendenze abbastanza semplice. Ora è enorme e ha tutto in esso (tranne che per il proverbiale lavello della cucina).

Ma non temete, è abbastanza modulare in modo da poter utilizzare solo i pezzi che si desidera.

Per vedere dove tutto è iniziato prova:

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

Potrebbe essere vecchio ma è un eccellente prenotare.

Per un altro buon libro questa volta dedicato esclusivamente alla primavera vedi:

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

Fa riferimento anche alle versioni precedenti di Spring, ma vale sicuramente la pena guardare.

 1
Author: Pablojim, 2009-06-30 15:38:19

Spring era l'iniezione di dipendenza all'inizio, quindi aggiungi re di wrapper per quasi tutto (wrapper su implementazioni JPA, ecc.).

Lunga storia ... la maggior parte delle parti di primavera preffer soluzioni XML (motore di scripting XML ... brrrr), quindi per DI uso Guice

Buona libreria, ma con depnedenciec crescente, ad esempioSpring JDBC (forse una soluzione Java jdbc con parametri di nomi reali) prende da maven 4-5 next.

Utilizzando Spring MVC (parte di "big spring") per sviluppo web ... è un framework "basato su richiesta" , c'è una guerra santa "richiesta vs componente" ... a Voi

 1
Author: Jacek Cz, 2017-11-29 17:08:19
  • Spring è un framework leggero e flessibile rispetto a J2EE.
  • Il contenitore a molla funge da inversione del controllo.
  • Spring utilizza AOP, ovvero proxy e modelli di progettazione di metodi Singleton, Factory e Template.
  • Architetture a più livelli: separazione di preoccupazioni e livelli riutilizzabili e facilità di manutenzione.

inserisci qui la descrizione dell'immagine

 1
Author: Premraj, 2017-12-05 06:08:27

In passato ho pensato a Spring framework dal punto di vista puramente tecnico.

Data una certa esperienza nel lavoro di squadra e nello sviluppo di Webapp aziendali - direi che Spring è per sviluppo più rapido di applicazioni (applicazioni web) da disaccoppiamento i suoi singoli elementi (beans). Lo sviluppo più veloce lo rende così popolare. Spring consente di spostare la responsabilità di costruire (cablare) l'applicazione sul framework Spring. Il quadro di primavera dependency injection è responsabile del collegamento/ 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 bean.

Il test di tale applicazione è facile: l'obiettivo principale è dato ai singoli bean. Possono essere facilmente disaccoppiati e derisi, quindi il test delle unità è veloce ed efficiente.

Il framework Spring definisce più fagioli come @ Controller (@Restcontroller), @Archivio, @Componente per scopi web. Spring insieme a Maven fornisce una struttura intuitiva per gli sviluppatori. Il lavoro di squadra è facile e veloce in quanto vi è singoli elementi sono tenuti a parte e possono essere riutilizzati.

 0
Author: Witold Kaczurba, 2018-03-26 17:18:11

Spring framework è decisamente buono per lo sviluppo web più specifico per le api Rest. È a causa della sua dependency injection e dell'integrazione con altri moduli come spring security, primavera aop, struttura mvc, microservizi

Qualsiasi applicazione che si costruisce sicuramente avete bisogno di sicurezza.
Se si costruisce un prodotto, una lunga manutenzione, allora si avrà con aria di sfida bisogno di un concetto di Aop.

Se l'applicazione ha molto di più caricare quindi è necessario implementare microservizi.

La primavera sta dando tutta questa cosa in un'unica piattaforma. Supporto con molti moduli
La cosa principale è che spring è open source e extensible framework,ha un hook ovunque per integrare il codice personalizzato nel ciclo di vita.

Spring Data è un progetto che fornisce l'integrazione con il tuo progetto.


Quindi tutto ciò che serve per costruire l'applicazione ha Primavera.

 -1
Author: pratik deshai, 2018-02-13 13:43:23