CodeGym /Java Blog /Random-IT /Primavera per pigri Fondazione, concetti di base ed esemp...
John Squirrels
Livello 41
San Francisco

Primavera per pigri Fondazione, concetti di base ed esempi con codice. Parte 1

Pubblicato nel gruppo Random-IT
Primavera per pigri Fondazione, concetti di base ed esempi con codice.  Parte 1 - 1In questo articolo, non ti dirò come far funzionare un progetto Spring funzionante in 5 minuti usando il mio codice. Scriverò solo le basi - cose che potresti ignorare e creare comunque un progetto. Ma in questo articolo non capirai ancora cosa sta succedendo e, soprattutto, perché.

Cos'è il Framework di primavera?

Lo Spring Framework, o semplicemente Spring, è uno dei framework più popolari per la creazione di applicazioni web in Java. Un framework è come una libreria (forse hai più familiarità con questo termine), ma c'è qualcosa da considerare. In parole povere, quando usi una libreria, crei semplicemente istanze delle classi che contiene, chiami i metodi che ti servono e quindi ottieni il risultato che ti serve. In altre parole, questo è un approccio più imperativo: nel tuo programma, indichi esplicitamente il momento specifico in cui devi creare quale oggetto, quando chiamare quale metodo specifico, ecc. Con i framework, le cose sono leggermente diverse. Scrivi semplicemente alcune tue classi e scrivi della logica in esse, ma poi il framework stesso crea istanze delle tue classi e chiama i loro metodi. Le tue classi di solito implementano alcune interfacce dal framework o ereditano alcune delle sue classi, fornendoti così alcune funzionalità che sono già state scritte per te. Ma non è sempre così. Ad esempio, Spring cerca il più possibile di evitare un accoppiamento così stretto (dove le tue classi dipendono direttamente da classi/interfacce nel framework). Utilizza le annotazioni per raggiungere questo obiettivo. Torneremo su questo più tardi. Ma è importante capire che Spring è solo una raccolta di classi e interfacce disponibili per l'uso :) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni Web, ma anche per i programmi di console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi. fornendoti così alcune funzionalità che sono già state scritte per te. Ma non è sempre così. Ad esempio, Spring cerca il più possibile di evitare un accoppiamento così stretto (dove le tue classi dipendono direttamente da classi/interfacce nel framework). Utilizza le annotazioni per raggiungere questo obiettivo. Torneremo su questo più tardi. Ma è importante capire che Spring è solo una raccolta di classi e interfacce disponibili per l'uso :) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni Web, ma anche per i programmi di console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi. fornendoti così alcune funzionalità che sono già state scritte per te. Ma non è sempre così. Ad esempio, Spring cerca il più possibile di evitare un accoppiamento così stretto (dove le tue classi dipendono direttamente da classi/interfacce nel framework). Utilizza le annotazioni per raggiungere questo obiettivo. Torneremo su questo più tardi. Ma è importante capire che Spring è solo una raccolta di classi e interfacce disponibili per l'uso :) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni Web, ma anche per i programmi di console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi. Spring cerca il più possibile di evitare un accoppiamento così stretto (dove le tue classi dipendono direttamente da classi/interfacce nel framework). Utilizza le annotazioni per raggiungere questo obiettivo. Torneremo su questo più tardi. Ma è importante capire che Spring è solo una raccolta di classi e interfacce disponibili per l'uso :) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni Web, ma anche per i programmi di console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi. Spring cerca il più possibile di evitare un accoppiamento così stretto (dove le tue classi dipendono direttamente da classi/interfacce nel framework). Utilizza le annotazioni per raggiungere questo obiettivo. Torneremo su questo più tardi. Ma è importante capire che Spring è solo una raccolta di classi e interfacce disponibili per l'uso :) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni Web, ma anche per i programmi di console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi. ) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni web, ma anche per i programmi console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi. ) Voglio anche notare subito che Spring può essere utilizzato non solo per le applicazioni web, ma anche per i programmi console più comuni che sono così familiari a tutti noi. E ne scriveremo anche uno oggi.

Struttura

Ma la primavera non è solo un quadro particolare. Piuttosto, è un nome comune usato per riferirsi a diversi piccoli framework, ognuno dei quali svolge il proprio tipo di lavoro. Primavera per pigri Fondazione, concetti di base ed esempi con codice.  Parte 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Figura 2.1. Panoramica del Framework di primavera

Come puoi vedere, Spring è modulare. Questo ci permette di connettere solo i moduli di cui abbiamo bisogno per la nostra applicazione e non collegare quelli che ovviamente non useremo. Per quanto ne so, è stato questo approccio che ha permesso a Spring di superare il suo concorrente di allora (EJB) e prendere il comando. Le applicazioni che utilizzano EJB si sono trascinate dietro molte dipendenze e, di conseguenza, si sono rivelate lente e lente. L'immagine mostra che Spring Framework è composto da diversi moduli:
  • Accesso ai dati
  • ragnatela
  • Nucleo
  • e altro ancora
Oggi faremo conoscenza con alcuni concetti presenti nel modulo principale: bean, contesto e altri. Come avrai intuito, il modulo Data Access contiene strumenti per lavorare con i dati (principalmente database) e il modulo Web serve per lavorare su una rete (inclusa la creazione di applicazioni web, che verrà discussa in seguito). Inoltre, esiste un'infrastruttura completa che supporta Spring: molti altri progetti che non sono ufficialmente inclusi nel framework stesso, ma sono perfettamente integrati nel tuo progetto Spring (ad esempio, Spring Security, che spero anche di toccare, è per autenticare un utente su un sito web).

Perché Java ha lo Spring Framework?

Bene, oltre al fatto che è alla moda, elegante e fresco, posso dire subito che non appena avrai anche una piccola quantità di abilità usando Spring, capirai come ci sono tutti i tipi di lavoro che non hai più da fare, e quanto lavoro si assume la primavera. Puoi scrivere un paio di dozzine di righe di impostazioni di configurazione e scrivere un paio di classi, e ti ritroverai con un progetto funzionante. Ma non appena inizi a chiederti quanta roba c'è sotto il cofano, quanto lavoro è stato fatto e quanto codice dovresti scrivere se volessi implementare lo stesso progetto basato su semplici servlet o socket e Java puro, i tuoi capelli si rizzeranno :) La primavera è persino descritta come una specie di magia. Lo provi quando vedi che tutto funziona, ma hai anche un'idea approssimativa di come e quanto lavoro sta accadendo dietro le quinte, quindi sembra che ci sia davvero una sorta di magia in azione :) È più facile chiamarla magia che cercare di spiegare come sia tutto interconnesso. :) Il secondo argomento a favore dello studio di Spring è che circa il 90% delle offerte di lavoro per sviluppatori junior (sulla base delle mie osservazioni personali) richiede la conoscenza o almeno un'idea generale di cosa sia SpringData, Web MVC, e Securitymoduli offrono sviluppatori sofisticati :) Ma oggi si tratta solo delle basi.

DI/IoC

Se hai mai provato a leggere di Spring, la prima cosa che hai incontrato sono stati probabilmente questi acronimi: DI/IoC. Ora ti consiglio vivamente di prenderti una pausa da questo articolo e leggere questo articolo DZone ! IoC sta per inversione del controllo. L'ho già accennato di sfuggita quando ho scritto che l'utilizzo di una libreria implica che tu stesso indichi nel tuo codice quale metodo chiamare su quale oggetto, ma che l'utilizzo di un framework generalmente significa che il framework chiamerà il tuo codice al momento giusto. In altre parole, in quest'ultimo caso, non gestisci più il processo di esecuzione del codice/programma: il framework lo fa per te. Hai passato il controllo al framework (inversione del controllo). DI sta per iniezione di dipendenza. Con l'inserimento delle dipendenze, non crei oggetti cat nel metodo principale e poi li passi ai tuoi metodi. Invece, lo Spring Framework li crea per te. Dici semplicemente qualcosa come "Voglio prendere un gatto qui" e il framework te ne passa uno nel tuo metodo. Vedremo questa abbreviazione nei prossimi articoli.

Fagioli e contesto

Uno dei concetti chiave di Spring è il fagiolo. In realtà, questo è solo un oggetto di una certa classe. Supponiamo di avere un programma che richiede 3 oggetti: un gatto, un cane e un pappagallo. E abbiamo un sacco di classi con un sacco di metodi. A volte abbiamo bisogno di un gatto per un metodo, a volte abbiamo bisogno di un cane per un metodo diverso, ea volte i nostri metodi hanno bisogno sia di un gatto che di un pappagallo (ad esempio, il metodo per nutrire il gatto, ah ah). Per altri metodi ancora, sono necessari tutti e tre gli oggetti. Sì, potremmo prima creare questi tre oggetti nel metodo principale, quindi passarli alle nostre classi, quindi all'interno di queste classi passarli ai metodi pertinenti... E così via per tutto il programma. Ma se supponiamo anche di voler occasionalmente modificare l'elenco dei parametri di input per i nostri metodi (ad esempio, decidiamo di riscrivere qualcosa o aggiungere nuove funzionalità), quindi dovremo apportare alcune modifiche al codice. E ora immagina di non avere 3, ma 300 di questi oggetti. Un'alternativa sarebbe quella di raccogliere tutti i nostri oggetti in un elenco (List<Object>), passalo a ogni metodo e quindi ottieni l'oggetto necessario all'interno dei metodi. Ma mentre il programma viene eseguito, cosa succede se qualche oggetto viene aggiunto a questo elenco o, peggio, cosa succede se uno viene eliminato? Questo ha il potenziale per rompere ogni metodo in cui utilizziamo un indice per ottenere oggetti dall'elenco. Per evitare questo problema, decidiamo di memorizzare i nostri oggetti non in una lista, ma in una mappa, dove la chiave è il nome dell'oggetto e il valore è l'oggetto stesso. Questo ci permette di recuperare gli oggetti di cui abbiamo bisogno semplicemente usando il loro nome, per esempio get("pappagallo"), e in risposta otteniamo l'oggetto pappagallo. Oppure la chiave potrebbe essere la classe dell'oggetto e il valore potrebbe essere l'oggetto stesso. In questo caso, invece di specificare il nome dell'oggetto, possiamo semplicemente specificare la classe dell'oggetto di cui abbiamo bisogno. Anche questo è conveniente. Oppure potremmo persino scrivere una sorta di wrapper per la mappa, in cui alcuni metodi ottengono oggetti in base al loro nome e altri metodi ottengono oggetti in base alla loro classe. Quello a cui siamo arrivati ​​qui si chiama ancontesto dell'applicazione nel framework Spring. Un contesto è una raccolta di bean (oggetti). Accediamo a un contesto per ottenere il bean (oggetto) di cui abbiamo bisogno tramite il nome, il tipo o altri mezzi. Inoltre, possiamo chiedere a Spring stesso di andare a cercare nel proprio contesto il bean di cui abbiamo bisogno e passarlo al nostro metodo. Ad esempio, supponiamo di avere un metodo come questo:

public void doSomething(Cat cat) {
    ...
}
Quando Spring ha chiamato questo metodo, ha preso il nostro oggetto gatto dal suo contesto e lo ha passato al metodo. Ma ora abbiamo deciso che, oltre al gatto, il nostro metodo ha bisogno anche di un pappagallo. Con la primavera, niente potrebbe essere più facile! Scriviamo semplicemente:

public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Ora, quando Spring chiama il nostro metodo, comprende la necessità di passare un gatto e un pappagallo, quindi va al suo contesto, prende questi due oggetti e li passa al nostro metodo. Trasferendo le redini del controllo a Spring, trasferiamo anche la responsabilità di creare oggetti e di passarli ai nostri metodi, che Spring chiamerà. Ciò pone la domanda: come fa Spring a sapere quali oggetti (fagioli) creare?

Modi per configurare un'applicazione

Esistono tre modi principali per configurare un'applicazione , ovvero modi per dire a Spring esattamente di quali oggetti abbiamo bisogno:
  1. File di configurazione XML
  2. Configurazione basata su Java
  3. configurazione automatica
I creatori di Spring danno loro la priorità in questo ordine:
  • il metodo con priorità assoluta, da preferire, è la configurazione automatica
  • se la configurazione automatica non può essere utilizzata per configurare correttamente tutti i possibili bean, utilizzare la configurazione basata su Java (che comporta la creazione di oggetti utilizzando il codice Java)
  • e il metodo con la priorità più bassa è quello vecchio stile, utilizzando i file di configurazione XML.
La primavera ci permette anche di combinare questi metodi. Ad esempio, lascia che Spring configuri tutto ciò che può essere configurato automaticamente, usa la configurazione basata su Java ovunque tu abbia bisogno di parametri speciali e usa XML per qualsiasi configurazione legacy. Tutto funziona per essere abbastanza flessibile. Tuttavia, se tutto può essere configurato automaticamente, scegli quell'opzione. Prenderò in considerazione solo la configurazione automatica e la configurazione basata su Java. Le configurazioni XML sono utilizzate in quasi tutti gli esempi di Spring su Internet. Inoltre, una volta capito come funziona la configurazione basata su Java, non dovresti avere problemi a leggere un file XML che fa la stessa cosa. La configurazione automatica viene utilizzata quando dobbiamo lavorare con oggetti di classi che abbiamo scritto. Se la creazione di uno dei nostri oggetti richiede una logica molto specifica, o se non siamo in grado di creare qualche classe con l'annotazione necessaria per la configurazione automatica, allora possiamo usare la configurazione basata su Java per fare ciò che deve essere fatto. Nelprossima parte , creeremo un progetto Maven, collegheremo un paio dei principali moduli Spring e creeremo i nostri primi bean.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION