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上下文中获取MyDAOBeanbean。

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"方法。