L’ASTRAZIONE DEI COMPONENTI DELL’APPLICAZIONE

spring

L’astrazione è una tecnica basata sulle interfacce di Java che garantisce l’isolamento delle classi rispetto alla loro implementazione. Sarà tutto più chiaro quando andremo ad implementare il nostro progetto di test. Vedrai una struttura più complessa del progetto rispetto a quanto visto fono ad ora, normalmente questa è la struttura dei progetti basati su Spring.

CREAZIONE DEL PACKAGE CONFIG

Creiamo il package config con all’interno la classe ConfigApp.

ConfigApp

Abbiamo già visto la notazione @ComponentScan ti ripeto che Spring andrà a cercare nei package notifications, service, repository gli oggetti da inserire nel Context e contraddistinti con la notazione @Component. Creiamo adesso un nuovo package che chiameremo model, con una classe Clienti, normalmente nel model vanno specificate le classe di entità che saranno salvate in un database. Ancora non lavoriamo con le basi dati, per cui ci sarà una certa astrazione. Ti riporto il codice della classe clienti.

Clienti

IL PACKAGE REPOSITORY

Ora creiamo un package fondamentale che chiameremo repository. Questo package contiene le interfacce e le classi di implementazione che ci consentiranno di interfacciarci ai database. A questo livello ancora si tratta di una simulazione, quindi faremo finta che i dati dei clienti vengano inseriti nel database con delle print line. Creiamo una nuova interfaccia ClientiRepository con all’interno il metodo che salva i Clienti del nostro model nel repository.

LA CLASSE DI IMPLEMENTAZIONE

Tieni presente che tutte le classi che implementeranno tale Interface dovranno obbligatoriamente fornire l’implementazione di saveClienti(Clienti cliente) tuttavia tale implementazioni potranno differire l’una dall’altra, è questo il grosso vantaggio delle interfacce, ci potrà essere una implementazione per SQL Server e ad esempio una per MySQL. Ora andiamo a creare sempre all’interno dello stesso package la prima classe di implementazione.

ClientiRepositori
ClientRepositoryImpl

Ho usato la notazione @Repository anziché @Component perché è fondamentale chiarire quale sia il ruolo di questa classe. Cambia il nome ma la funzionalità in Spring è la medesima, tale classe verrà trovata grazie al ComponentScan e inserita nel Contesto.

CREAZIONE DEL PACKAGE NOTIFICATIONS

Creiamo un nuovo package notifications, che invierà al Cliente una notifica. Come vedremo avremmo la possibilità di specificare una notifica via e-mail o via SMS. Vediamo l’interfaccia.

NotificationProxy

Ora andremo a creare due classi di implementazione, una per la notifica via e-mail e l’altra per la notifica via SMS.

SMSNotificationProxy
EmailNotificationProxy

Come abbiamo visto per i Bean anche una classe può essere nominata tramite la notazione @Qualifier. Questo è fondamentale perché a meno che non usiamo la notazione @Primary Spring non saprebbe quale delle due implementazioni (e-mail, SMS) prendere.

CREAZIONE DEL PACKAGE SERVICE

Creiamo un nuovo package, service. Questo è un package fondamentale nel quale andranno inserite tutte le interfacce e le relative implementazioni che rappresentano la logica di Business. Andiamo a creare l’interfaccia ClientiService che avrà lo scopo di salvare il cliente e inviargli la notifica.Creiamo la classe ClientiServiceImpl dove vedremo all’opera l’interazione tra due diverse componenti.

ClientiService
ClientiServiceImpl

IL CODE INJECTION

Qui dobbiamo implementare il Code Injection di elementi creati in precedenza, la repository e la notification. Come ti ho già detto il Code Injection può venire in due modi: Il primo, commentato, fatto tramite costruttore, dove attenzione è qui che viene specificato sempre con la notazione @Qualifier quale implementazione di notifica vogliamo utilizzare.

LA NOTAZIONE @AUTOWIRED

Il secondo tramite la notazione @Autowired. Anche in questo caso visto che questa classe deve obbligatoriamente essere inserita nel Context ho usato la notazione @Service anziché @Component per meglio chiarire il ruolo svolto da questa classe. Attenzione, utilizziamo le interfacce per garantire l’astrazione.

NB: È fondamentale capire che tramite la notazione @Qualifier possiamo scegliere quale implementazione di notifica dobbiamo inviare al Cliente, (SMS,E-MAIL) tutto ciò senza intervenire nel codice ma solo nella notazione.

Ora è arrivato il momento di utilizzare tutto il lavoro svolto sino ad ora andando nell’entry point Main e scrivendo il codice relativo che riporto.

Main

CONCLUSIONI

Eseguire l’applicazione e visualizzare la stampa in console.

DOWNLOAD CODICE DELL’ARTICOLO

CODICE DELL’ARTICOLO

In basso è riportato il video per l’importazione nel proprio workspace del progetto.

IL LINGUAGGIO JAVA

IL LINGUAGGIO JAVA

LINK AI POST PRECEDENTI

SPRING FRAMEWORK