< Home
Stampa

Introduzione a Springboot

Sommario

Prerequisiti

Per poter seguire queste lezioni sono richiesti due prerequisiti:

Introduzione ai framework

Partiamo dal definire cosa è un framework. Esso è un insieme di librerie progettate per un linguaggio di programmazione che forniscono una infrastruttura software che:

  • fornisce una base predefinita, come uno scheletro o un template di applicazione già pronta per essere personalizzata per le proprie esigenze, che evita al programmatore di scrivere da zero codice ripetitivo o ridondante;
  • una architettura software di riferimento per la scrittura dei componenti dell’applicazione;
  • un insieme di regole e convenzioni per lo sviluppo standardizzate;
  • un insieme di strumenti per la configurazione, il test ed il deploy dell’applicazione.

Un framework viene utilizzato per raggiungere un insieme di obiettivi:

  • scrivere meno codice “a basso livello”: il programmatore si può concentrare a sviluppare solo il codice effettivo di progetto, lasciando al framework molti dettagli tecnici;
  • standardizzare lo sviluppo in un team di programmatori: un programmatore che conosce il framework è in grado di entrare in un progetto in un contesto familiare;
  • rende più agevole il lavoro di team perché la struttura dell’applicazione è standardizzata e non dipende da scelte specifiche di un singolo programmatore.

Il primo framework Web moderno è stato Rails per il linguaggio Ruby (“Ruby on Rails”), che per primo, che introdusse tutti i concetti chiave (che vedremo in dettaglio) usati da tutti gli altri framework sopra citati:

  • architettura MVC (suddivisione dell’applicazione in tre layer: il modello dati, le viste HTML/dati, e il controller per la business logic);
  • convention over configuration (ridurre al minimo le configurazioni);
  • l’uso di OR/M (evitare di scrivere query SQL sui database ma automatizzare la conversione dati del modello nel database);
  • l’uso estensivo di design patterns OOP come Repository, Singleton, DI,

L’idea di Rails è stata così buona che sono stati sviluppati frameworks molto simili un po’ per tutti i linguaggi Web. Qui alcuni framework molto noti nel mondo Web Application Server (per siti web o Web Services):

  • PHP: Laravel, Symfony, Yii;
  • C#: .NET MVC;
  • Python: Django, Flask
  • JS: React, Angular, Vue (lato client) e SailsJS, Next e Nuxt (NodeJS)

Java EE, Spring e Springboot

Per Java esiste uno standard ufficiale, chiamato Java EE, che definisce un insieme di librerie standard per le applicazioni lato server Enterprise, chiamate Java EE che estendono la libreria Java standard (Java SE). Java EE non rientra del tutto nella definizione di “framework”, ma più come un insieme di librerie integrate tra loro che offrono molti dei servizi sopra menzionati, senza però fornire una infrastruttura già pronta per essere riutilizzata. Deve essere quindi il team di sviluppo a costruire la propria applicazione scegliendo quali strumenti utilizzare e quali no.

Spring è invece un vero framework che integra Java EE in una struttura coerente e semplificata, in una architettura MVC ed uno scheletro di applicazione già pronta. E’ tuttavia basato sempre su configurazioni (su XML o tramite convenzioni), richiede un server Web esterno ed in genere richiede un po’ di lavoro preliminare prima di essere utilizzabile. In altre parole, resta decisamente più complesso degli altri frameworks, al punto che molti programmatori si sono spostati su altre tecnologie (come C#).

SpringBoot è una estensione di Spring che automatizza la creazione e configurazione di un progetto, integra il Web server in modo trasparente per il programmatore e rende molto semplice la creazione di progetti occupandosi di tutto il codice boilerplate, inoltre semplifica il deploy dell’applicazione ad un solo eseguibile Java autoconclusivo. I progetti SpringBoot sono sempre progetti Spring, ma il programmatore riduce al minimo le attività a basso livello, concentrandosi solo sullo sviluppo dell’applicazione.

In queste lezioni ci occuperemo di SpringBoot, che ad oggi è il framework Java più utilizzato, ma va ricordato che dietro a SpringBoot ci sono Spring e Java EE.

Concetti chiave di SpringBoot

SpringBoot si basa sui seguenti concetti chiave:

  1. Spring Initializr: un “wizard” che configura in pochi secondi uno scheletro di progetto
  2. Maven (o Gradle): un tool a linea di comando che consente di configurare il progetto, le sue dipendenze, ed eseguirlo in sviluppo, test e rilasciarlo in produzione.
  3. Architettura multilayer (MVC o simili):
  4. Dependency Injection:

Spring Initializr

Si tratta di uno strumento (disponibile anche su web: https://start.spring.io/) che consente di generare un progetto a partire da un insieme di informazioni iniziali. Lo vedremo dettagliatamente nel primo progetto.

Maven (o Gradle)

Maven e Gradle sono degli strumenti (alternativi tra loro) che gestiscono la configurazione del progetto, consentono di installare librerie esterne e soprattutto prevedono dei comandi per compilare, eseguire, testare e rilasciare il progetto. Vedremo i principali comandi nel corso dei progetti. Non sono tool specifici di Spring.

Nei nostri progetti useremo Maven.

Architettura multilayer

Una architettura multi-layer prevede che l’applicazione suddivida le sue classi in layer ben distinti. Per realizzare Web Service i layer previsti sono i seguenti:

  • Controller: definisce le API del servizio, ad esempio REST;
  • Service: definisce la logica di business, cioè il comportamento degli algoritmi dell’applicazione
  • Repository/Model: definisce il layer dove sono gestiti i dati.

A questi si aggiungono poi un insieme di moduli di supporto.

Dependency Injection

SpringBoot utilizza un meccanismo di gestione delle dipendenze tra le classi che usa il design pattern Dependency Injection.

Lo vedremo in azione fin dal primo progetto reale.