Cos’è un Bean?
Un bean è un’istanza di una classe Java che viene gestita dal container Spring. In pratica, il bean container si occupa di creare, configurare e gestire il ciclo di vita dei bean, permettendo agli sviluppatori di concentrarsi sulle funzionalità specifiche dell’applicazione. I bean possono essere considerati come gli elementi di base che costituiscono l’architettura di un’applicazione Spring Boot.
Quali sono i vantaggi dell’utilizzo di Bean?
I bean forniscono diversi vantaggi chiave:
-
- Modularità: I bean promuovono la separazione delle responsabilità, rendendo il codice più facile da mantenere e estendere.
- Riutilizzo del codice: I bean possono essere condivisi e riutilizzati tra diverse parti dell’applicazione, riducendo la duplicazione del codice.
- Testabilità: Poiché i bean sono gestiti dal container, è più semplice testare singole parti dell’applicazione isolandole dal resto del sistema.
- Configurazione esterna: Con i bean, è possibile esternalizzare la configurazione dell’applicazione, facilitando la gestione delle impostazioni in diversi ambienti.
Come creare e configurare i bean?
Per creare un bean, è necessario definire una classe Java e annotarla con l’annotazione @Component o una delle sue specializzazioni, come @Service, @Repository o @Controller. Queste annotazioni indicano al container Spring di creare e gestire un’istanza di quella classe come un bean.
Un esempio di bean è il seguente:
@Service
public class MyService {
// Logica del servizio
}
Per inizializzare invece un bean di configurazione è possibile creare un bean utilizzando un metodo all’interno di una classe di configurazione annotata con @Configuration:
@Configuration
public class MyConfiguration {
@Bean
public MyService myService() {
return new MyService();
}
}
Come vengono iniettati i bean?
Per utilizzare un bean all’interno di un’altra classe, è possibile utilizzare l’annotazione @Autowired:
@Service
public class AnotherService {
@Autowired
private MyService myService;
// Logica del servizio
}
Spring Boot si occuperà di iniettare l’istanza del bean nella variabile dichiarata o nel costruttore (un comportamento simile è stato ripreso da Angular con la Dependency Injection nel costruttore).
Il ciclo di vita di un Bean
Il container Spring gestisce il ciclo di vita dei bean, che include la creazione, l’inizializzazione, l’utilizzo e la distruzione. È possibile personalizzare il comportamento del bean in ciascuna di queste fasi utilizzando le annotazioni @PostConstruct e @PreDestroy o implementando le interfacce InitializingBean e DisposableBean.
Ecco un esempio di bean che fa uso delle due annotazioni:
@Service
public class MyService {
@PostConstruct
public void init() {
// Logica di inizializzazione del bean
}
// Logica del servizio
@PreDestroy
public void cleanup() {
// Logica di pulizia del bean prima della distruzione
}
}
Quali sono gli ambiti del bean?
Gli ambiti dei bean determinano la visibilità e la durata delle istanze dei bean all’interno dell’applicazione. Spring Boot supporta diversi ambiti, tra cui:
-
- Singleton (default): Un’unica istanza del bean viene condivisa in tutta l’applicazione.
- Prototype: Viene creata una nuova istanza del bean ogni volta che viene richiesta.
- Request: Un’unica istanza del bean viene creata per ogni richiesta HTTP.
- Session: Un’unica istanza del bean viene creata per ogni sessione HTTP.
- Application: Un’unica istanza del bean viene condivisa tra tutti gli utenti di un’applicazione basata su Servlet.
Per specificare l’ambito di un bean, è possibile utilizzare l’annotazione @Scope:
@Service
@Scope("prototype")
public class MyPrototypeService {
// Logica del servizio
}