Corso di Java Spring Framework #4 | Bean (prima parte)
In questo nuovo appuntamento della serie introduciamo il concetto fondamentale di "bean".
Come abbiamo già detto in precedenza Spring si basa sulla Dependency Injection, ovvero sul meccanismo attraverso il quale è possibile delegare ad una entità esterna la creazione e gestione delle dipendenze.
Ed è qui che si inserisce il concetto di bean che in estrema sintesi corrisponde ad un oggetto il cui ciclo di vita è gestito direttamente dal framework.
In altri termini un'istanza della classe viene creata, gestita e distrutta da Spring senza alcun intervento diretto dello sviluppatore, se non quello di dichiarare la necessità di utilizzo di determinati oggetti.
Per denotare i bean abbiamo essenzialmente due modalità.
La prima consiste nell'annotare una classe con @Component
così che Spring possa creare una sua istanza all'avvio dell'applicazione e gestirla all'interno del cosiddetto IoC container.
L'interazione con questi bean è possibile attraverso opportune interfacce tra cui l'ApplicationContext
.
In realtà buona parte di queste operazioni avviene in modo trasparente senza la necessità di conoscere tutti i dettagli implementativi.
Oltre a @Component
si possono utilizzare altre annotazioni, definite stereotipi, come @Controller
, @RestController
, @Service
, @Repository
e @Configuration
, che abbiamo già visto nelle esercitazioni di Spring Boot.
Inoltre è ncessario abilitare il component scan mediante l'omonima annotazione (@ComponentScan
) per fare in modo che Spring vada a ricercare le classi annotate in questo modo.
Come vedremo con Spring Boot tutto ciò viene fatto in automatico sfruttando l'autoconfigurazione di cui abbiamo già parlato in occasione dell'approccio convention over configuration [vai al video].
La seconda modalità consiste nel definire una classe annotata con @Configuration
all'interno della quale saranno presenti dei metodi, annotati con @Bean
, che restituiscono delle istanze di ulteriori classi da trattare come bean.
Di default il nome del bean corrisponde a quello del metodo che li definisce a meno che non sia stato specificato diversamente attraverso un opportuno attributo dell'annotazione.
Inoltre, sempre di default, esiste un'unica istanza di ciascun bean (vedi pattern singleton) sebbene sia possibile modificare questa impostazione attraverso gli scope di cui ci occuperemo in un'altra occasione.
A questo punto ci si potrebbe chiedere quale sia la differenza tra le annotazioni @Component
(e gli altri stereotipi) e @Bean
e quando utilizzare un approccio oppure l'altro, visto che il secondo sembra essere più macchinoso.
In termini molto semplici la prima modalità si utilizza con le classi da noi create direttamente agendo sul codice sorgente, la seconda quando vogliamo creare un bean di una dipendenza esterna di cui abbiamo solo il jar.
Nel prossimo articolo vedremo degli esempi pratici direttamente sul computer.
[VIDEO YOUTUBE]
[LINKS]