[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 qualche volta 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?




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 di primavera.

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.




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 ...)

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




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




La risposta accettata non implica 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 legare le classi insieme usando un file XML: le annotazioni. Usiamo l'esempio dalla risposta accettata e registriamo il bean direttamente nella classe usando l'unica annotazione @Bean :

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

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

La dichiarazione di cui sopra è valida con un piccolo bonus che non richiede l'utilizzo di file XML e il cablaggio con un'altra annotazione @Autowired che trova un'implementazione rilevante e la inietta.

@Autowired
private UserLister userLister;



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