获取spring上下文

问题:我们想在自己程序的任一地方获取由spring管理的bean

1)

ServletContext context = arg0.getSession().getServletContext();
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(context);
yourService = (YourService)ctx.getBean("yourService");

 

2)可以实现BeanFactoryAware接口,实现BeanFactoryAware 接口的Bean类,在依赖关系设定完成后,初始化方法之前,Spring容器将会注入BeanFactory的实例,你可以通过这个 BeanFactory的实例获取其他的bean,不过这样你的bean就和spring耦合到一块了。

我们既然可以通过set来拿到我们要的对象,为什么还要用这个beanFactory呢,道理很简单,因为有些情况是需要 动态的去获取对象的,比如说我有10个银行的处理对象,他们都继承了我的BankService对象,但是具体处理的时候要哪家银行的对象呢?这个依赖于 用户的选择。你可以注入10个BankService实例,然后用if --else来搞,不过那样太坨了。每增加一家银行你都需要改代码。
通过beanFactory的话,那就一行代码搞定,只要给beanName就OK了,动点脑筋吧beanName配置的有规律点,然后根据用户的银行选择,凑出个beanName,大功告成了!

<?xmlversion="1.0"encoding="gb2312"?>
<!--指定Spring 配置文件的dtd>
<!DOCTYPE beans PUBLIC"-//SPRiNG//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<!--Spring配置文件的根元素-->
<beans>
<!配置 BeanFactoryAwarebean-->
<bean id="chinese" class="lee.Chinese"/></beans>

 将代码中

public class BeanFactoryAnywhere implements BeanFactoryAware {
	public static  BeanFactory beanFactory;
	@Override
	public void setBeanFactory(BeanFactory arg0) throws BeansException {
		BeanFactoryAnywhere.beanFactory=arg0;

	}

}
 

你可能感兴趣的:(spring,bean,配置管理)