Аннотация @Bean в Spring

Весна Аннотация @Bean применяется к методу для указания, что он возвращает бин, который управляется контекстом Spring. Аннотация Spring Bean обычно объявляется в методах классов конфигурации. В этом случае методы бинов могут ссылаться на другие методы @Bean в том же классе, вызывая их напрямую.

Пример @Bean весны

Предположим, у нас есть простой класс, как показано ниже.

package com.journaldev.spring;

public class MyDAOBean {

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

Вот класс конфигурации, в котором мы определили метод @Bean для класса 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();
	}
}

Мы можем получить бин MyDAOBean из контекста Spring, используя следующий фрагмент кода.

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.scan("com.journaldev.spring");
context.refresh();
		
// Получение бина по классу
MyDAOBean myDAOBean = context.getBean(MyDAOBean.class);

Имя бина весны

Мы можем указать имя @Bean и использовать его для получения из контекста весны. Допустим, у нас есть класс MyFileSystemBean, определенный следующим образом:

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");
	}
}

Теперь определим метод @Bean в классе конфигурации:

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

Мы можем получить этот бин из контекста, используя его имя бина.

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

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

Spring @Bean initMethod и destroyMethod

Мы также можем указать методы инициализации и уничтожения бина Spring. Эти методы вызываются соответственно при создании бина Spring и закрытии контекста.

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

Вы заметите, что метод “init” вызывается при вызове метода refresh контекста, а метод “destroy” вызывается при вызове метода close контекста.

Резюме

Аннотация @Bean Spring широко используется в приложениях Spring, основанных на аннотациях.

Вы можете загрузить полный проект Spring из нашего репозитория на GitHub.

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