INTRODUZIONE AL CODE INJECTION

DISTINGUERE I BEAN CON IL NOME E LA NOTAZIONE PRIMARY

springPrima di parlare di Code Injection affrontiamo altri argomenti anch’essi fondamentali nello Spring Framework. Con il codice del precedente articolo abbiamo visto che con un Bean è tutto funzionante. Tuttavia, ci dobbiamo chiedere se anziché avere un solo cliente, quindi un solo Bean ce ne fossero due? Testiamolo inseriamo un altro Bean lo chiamiamo cliente2 e vediamo se lo Spring Context riesce a risolvere e distinguere i due Bean. Modifichiamo anche la classe Main e vediamo se tutto funziona. Riporto le modifiche al codice.

Main
ConfigApp

Se proviamo ad eseguire questo codice otteniamo un errore in quanto Spring non riesce a capire quali dei due Bean intendiamo usare.

Errore

Quando abbiamo una situazione di questo tipo dobbiamo aggiungere un nome ai nostri Bean. Una volta nominati i Bean, nel metodo getBean() dobbiamo aggiungere l’identificativo. Riporto il codice.

Main
ConfigApp

Oltre a identificare i nostri Bean tramite nome, abbiamo la possibilità di specificare quale dei due è in uno stato Primary. A parità del tipo restituito si prenderà come riferimento il Bean con la notazione @Primary. Nel main togliamo il nome e vedrai che la risposta sarà identica alla precedente. Questo è molto importante quando ad esempio abbiamo dei Bean che si interfacciano ai database, se abbiamo due connessioni, con questa notazione possiamo specificare la base dati principale. I Bean possono restituire anche tipi nativi come ad esempio una stringa. Il codice scaricabile mostra come sia possibile fare ciò.

USARE LA NOTAZIONE @COMPONENTSCAN

Modifichiamo la classe Clienti inserendo la notazione @Component che è la più generica. In questo caso stiamo applicando questa notazione alla classe Clienti. Fatto questo modifichiamo il codice della classe di configurazione ConfigApp rimuovendo i due Bean. Riporto l’immagine.

ComponentScan

Con la notazione @ComponentScan stiamo dicendo a Spring vai a cercare nel package main tutti gli elementi che sono dei componenti che dovranno entrare nel Context. La classe Clienti dato che abbiamo usato la notazione @Component verrà inserita nel Context come si vede nella finestra console.

Main

INTRODUZIONE ALL’INTERAZIONE DEI BEAN NEL CONTEXT

Il principio di funzionamento dello Spring si basa sull’ Inversion Of Control (IOC). La slide riassume il concetto.

IOC

Andiamo ad aggiungere una nuova classe, Bollini. Riporto tutte le modifiche al codice.

Bollini
Main

Dal codice riportato emerge che i Bean sono stati regolarmente creati; tuttavia, il valore null stampato nella console indica che non c’è ancora un’interazione tra la classe Bollini e la classe Clienti. Nella classe Clienti che riporto abbiamo impostato una proprietà Bollini con i relativi getter e setter; tuttavia, non gli stiamo dicendo in alcun modo come ricavare i valori del Bean Bollini quando questo viene istanziato.

Clienti

Come prima cosa modifichiamo la classe di configurazione, passando come argomento i bollini nel Bean Clienti. Così facendo ora i due Bean possono comunicare tra loro.

ConfigApp

La classe Bollini viene istanziata una sola volta, questo perché Spring va a controllare se tale classe è già presente nel Context, se già presente utilizzerà quell’elemento, non andrà ad istanziarne un altro. Ciò significa che nel parametro del Bean Clienti utilizzerà il riferimento già istanziato. Questo è il primo metodo per far dialogare i Bean, un secondo è quello di togliere il parametro Bollini e passare al setter il metodo bollini().

INDRODUZIONE AL CODE INJECTION

Modifichiamo la classe ConfigApp e aggiungiamo la notazione @ComponentScan in modo da dire a Spring in quale packages andare a cercare i componenti che verranno inserti nel Context. Per fare questo dobbiamo inserire la notazione @Component nelle relative classi. Adesso nella classe Clienti andremo ad iniettare il codice della classe Bollini.

CodeInjection
Bollini

Esistono due modalità di Code Injection, la prima è quella di passare nel costruttore della classe Clienti la classe Bollini e assegnare il parametro ad una proprietà privata dichiarata come final (vedi immagine sopra riportata). Il secondo è quello di usare la notazione @Autowired. Il Code Injection è una delle colonne portanti del Framework Spring.

Autowired

DOWNLOAD CODICE DELL’ARTICOLO

CODICE DELL’ARTICOLO

IL LINGUAGGIO JAVA

IL LINGUAGGIO JAVA

LINK AI POST PRECEDENTI

SPRING FRAMEWORK

COME IMPORTARE I PROGETTI IN WINDOWS E LINUX

Per importare i progetti, scompattare il file zip copiare il codice nel proprio Workspace facendo uno switch del Workspace stesso sulla cartella Progetti. Il video seguente illustra la procedura, valida sia per Windows che per Linux.