INTRODUZIONE AL CODE INJECTION
DISTINGUERE I BEAN CON IL NOME E LA NOTAZIONE PRIMARY
Prima 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.
Se proviamo ad eseguire questo codice otteniamo un errore in quanto Spring non riesce a capire quali dei due Bean intendiamo usare.
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.
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.
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.
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.
Andiamo ad aggiungere una nuova classe, Bollini. Riporto tutte le modifiche al codice.
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.
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.
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.
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.
DOWNLOAD CODICE DELL’ARTICOLO
IL LINGUAGGIO JAVA
LINK AI POST PRECEDENTI
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.
Scrivi un commento