Anotación @Bean de Spring

La anotación @Bean de Spring se aplica en un método para especificar que devuelve un bean que será administrado por el contexto de Spring. La anotación Spring Bean suele declararse en métodos de clases de configuración. En este caso, los métodos de bean pueden hacer referencia a otros métodos @Bean en la misma clase llamándolos directamente.

Ejemplo de @Bean de Spring

Supongamos que tenemos una clase simple como la siguiente.

package com.journaldev.spring;

public class MyDAOBean {

	@Override
	public String toString() {
		return "MyDAOBean"+this.hashCode();
	}
}

Aquí hay una clase de configuración donde hemos definido un método @Bean para la clase 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 obtener el bean MyDAOBean del contexto de Spring usando el siguiente fragmento de código.

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
		
// Obtener Bean por Clase
MyDAOBean myDAOBean = context.getBean(MyDAOBean.class);

Nombre del Bean de Spring

Podemos especificar el nombre del @Bean y usarlo para obtenerlo del contexto de Spring. Supongamos que tenemos la clase 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");
	}
}

Ahora definimos un método @Bean en la clase de configuración:

@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"})
public MyFileSystemBean getMyFileSystemBean() {
	return new MyFileSystemBean();
}

Podemos obtener este bean del contexto utilizando el nombre del bean.

MyFileSystemBean myFileSystemBean = (MyFileSystemBean) context.getBean("getMyFileSystemBean");

MyFileSystemBean myFileSystemBean1 = (MyFileSystemBean) context.getBean("MyFileSystemBean");

Spring @Bean initMethod y destroyMethod

También podemos especificar el método de inicialización y destrucción del bean de Spring. Estos métodos se llaman cuando se crea el bean de Spring y cuando se cierra el contexto, respectivamente.

@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"}, initMethod="init", destroyMethod="destroy")
public MyFileSystemBean getMyFileSystemBean() {
	return new MyFileSystemBean();
}

Notarás que el método “init” se llama cuando invocamos el método refresh del contexto y el método “destroy” se llama cuando invocamos el método close del contexto.

Resumen

La anotación @Bean de Spring se utiliza ampliamente en aplicaciones de Spring basadas en anotaciones.

Puedes descargar el proyecto completo de Spring desde nuestro Repositorio de GitHub.

Source:
https://www.digitalocean.com/community/tutorials/spring-bean-annotation