Spring @Bean注释
时间:2020-02-23 14:35:45 来源:igfitidea点击:
Spring @Bean Annotation应用于方法,以指定它返回要由Spring上下文管理的bean。
Spring Bean批注通常在Configuration类方法中声明。
在这种情况下,bean方法可以通过直接调用它们来引用同一类中的其他@Bean方法。
Spring @Bean示例
假设我们有一个简单的类,如下所示。
package com.theitroad.spring; public class MyDAOBean { @Override public String toString() { return "MyDAOBean"+this.hashCode(); } }
这是一个Configuration类,其中我们为MyDAOBean类定义了@Bean方法。
package com.theitroad.spring; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class MyAppConfiguration { @Bean public MyDAOBean getMyDAOBean() { return new MyDAOBean(); } }
我们可以使用下面的代码片段从Spring上下文中获取MyDAOBean
bean。
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(); context.scan("com.theitroad.spring"); context.refresh(); //Getting Bean by Class MyDAOBean myDAOBean = context.getBean(MyDAOBean.class);
Spring Bean 名称
我们可以指定@Bean名称,并使用它从spring上下文中获取它们。
假设我们将" MyFileSystemBean"类定义为:
package com.theitroad.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(); }
我们可以使用bean名称从上下文中获取此bean。
MyFileSystemBean myFileSystemBean = (MyFileSystemBean) context.getBean("getMyFileSystemBean"); MyFileSystemBean myFileSystemBean1 = (MyFileSystemBean) context.getBean("MyFileSystemBean");
Spring @Bean initMethod和destroyMethod
我们还可以指定spring bean的init方法和destroy方法。
在创建spring bean和关闭上下文时分别调用这些方法。
@Bean(name= {"getMyFileSystemBean","MyFileSystemBean"}, initMethod="init", destroyMethod="destroy") public MyFileSystemBean getMyFileSystemBean() { return new MyFileSystemBean(); }
您会注意到,当我们调用上下文" refresh"方法时,将调用" init"方法,而当我们调用上下文" close"方法时,将调用" destroy"方法。