L’annotazione @Bean di Spring viene applicata su un metodo per specificare che restituisce un bean da gestire dal contesto di Spring. L’annotazione Spring Bean viene di solito dichiarata nei metodi delle classi di configurazione. In questo caso, i metodi dei bean possono fare riferimento ad altri metodi @Bean nella stessa classe chiamandoli direttamente.
Esempio di @Bean di Spring
Supponiamo di avere una classe semplice come segue.
package com.journaldev.spring;
public class MyDAOBean {
@Override
public String toString() {
return "MyDAOBean"+this.hashCode();
}
}
Ecco una classe di configurazione dove abbiamo definito un metodo @Bean per la classe MyDAOBean
.
package com.journaldev.spring;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyAppConfiguration {
@Bean
public MyDAOBean getMyDAOBean() {
return new MyDAOBean();
}
}
Possiamo ottenere il bean MyDAOBean
dal contesto di Spring utilizzando il seguente frammento di codice.
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
// Ottenere il Bean per Classe
MyDAOBean myDAOBean = context.getBean(MyDAOBean.class);
Nome del Bean di Spring
Possiamo specificare il nome del @Bean e usarlo per ottenerlo dal contesto di Spring. Supponiamo di avere la classe MyFileSystemBean
definita come segue:
package com.journaldev.spring;
public class MyFileSystemBean {
@Override
public String toString() {
return "MyFileSystemBean"+this.hashCode();
}
public void init() {
System.out.println("init method called");
}
public void destroy() {
System.out.println("destroy method called");
}
}
Ora definiamo un metodo @Bean nella classe di configurazione:
@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"})
public MyFileSystemBean getMyFileSystemBean() {
return new MyFileSystemBean();
}
Possiamo ottenere questo fagiolo dal contesto usando il nome del fagiolo. `
MyFileSystemBean myFileSystemBean = (MyFileSystemBean) context.getBean("getMyFileSystemBean");
MyFileSystemBean myFileSystemBean1 = (MyFileSystemBean) context.getBean("MyFileSystemBean");
Spring @Bean` initMethod e destroyMethod `
` Possiamo anche specificare il metodo di inizializzazione e il metodo di distruzione del fagiolo Spring. Questi metodi vengono chiamati rispettivamente quando il fagiolo Spring viene creato e quando il contesto viene chiuso. `
@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"}, initMethod="init", destroyMethod="destroy")
public MyFileSystemBean getMyFileSystemBean() {
return new MyFileSystemBean();
}
` Noterai che il metodo “init” viene chiamato quando invochiamo il metodo di refresh del contesto e il metodo “destroy” viene chiamato quando invochiamo il metodo di chiusura del contesto. `
` `Riepilogo
` L’annotazione Spring `@Bean` è ampiamente utilizzata nelle applicazioni Spring basate su annotazioni. `
` È possibile scaricare il progetto Spring completo dal nostro `Repository GitHub`.
Source:
https://www.digitalocean.com/community/tutorials/spring-bean-annotation