Весна Аннотация @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