Anotação @Bean do Spring

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