A anotação @Bean do Spring é aplicada a um método para especificar que ele retorna um bean a ser gerenciado pelo contexto do Spring. A anotação Spring Bean é geralmente declarada em métodos de classes de configuração. Neste caso, os métodos de bean podem fazer referência a outros métodos @Bean na mesma classe chamando-os diretamente.
Exemplo do Spring @Bean
Vamos supor que temos uma classe simples como abaixo.
package com.journaldev.spring;
public class MyDAOBean {
@Override
public String toString() {
return "MyDAOBean"+this.hashCode();
}
}
Aqui está uma classe de configuração onde definimos um método @Bean para a 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();
}
}
Podemos obter o bean MyDAOBean
do contexto do Spring usando o trecho de código abaixo.
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
// Obtendo o Bean pela Classe
MyDAOBean myDAOBean = context.getBean(MyDAOBean.class);
Nome do Bean Spring
Podemos especificar o nome do @Bean e usá-lo para obtê-lo do contexto do Spring. Vamos supor que tenhamos a classe MyFileSystemBean
definida como:
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");
}
}
Agora defina um método @Bean na classe de configuração:
@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"})
public MyFileSystemBean getMyFileSystemBean() {
return new MyFileSystemBean();
}
Podemos obter este feijão a partir do contexto usando o nome do feijão.
MyFileSystemBean myFileSystemBean = (MyFileSystemBean) context.getBean("getMyFileSystemBean");
MyFileSystemBean myFileSystemBean1 = (MyFileSystemBean) context.getBean("MyFileSystemBean");
Spring @Bean método de inicialização e destroyMethod
Também podemos especificar o método de inicialização e destruição do feijão Spring. Esses métodos são chamados quando o feijão Spring está sendo criado e quando o contexto está sendo fechado, respectivamente.
@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"}, initMethod="init", destroyMethod="destroy")
public MyFileSystemBean getMyFileSystemBean() {
return new MyFileSystemBean();
}
Você notará que o método “init” é chamado quando invocamos o método refresh
do contexto e o método “destroy” é chamado quando invocamos o método close
do contexto.
Resumo
O @Bean da anotação Spring é amplamente utilizado em aplicações Spring orientadas por anotações.
Você pode baixar o projeto Spring completo do nosso Repositório GitHub.
Source:
https://www.digitalocean.com/community/tutorials/spring-bean-annotation