最近在做项目的时候我发现一个问题:Spring的IOC容器不能在Web中被引用(或者说不能被任意地引用)。
我们在配置文件中让Spring自 动装配,但并没有留住ApplicationContext的实例。
我们如果希望在我们的项目中任何位置都能拿到同一个 ApplicationContext来获取IOC容器中的资源,就要让Spring将上下文环境填充到我们能获取的地方,
比如下面的做法(来自网络资 源): 自定义一个工具类,实现自ApplicationContextAware接口,接口的方法是setApplicationContext,我 们实现它,并让其为我们服务,因为Spring在load自己的时候会将上下文环境填充进来。我们所要做的就是将得到的 ApplicationContext保存下来用
package com.qingguiyu.utils.spring;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
/**
* Spring IOC上下文工具类
*
* @author reyo
*
*/
public class SpringUtil implements ApplicationContextAware {
/**
* 当前IOC
*/
private static ApplicationContext applicationContext;
/**
* 设置当前上下文环境,此方法由spring自动装配
*/
@Override
public void setApplicationContext(ApplicationContext arg0)
throws BeansException {
applicationContext = arg0;
}
/**
* 从当前IOC获取bean
*
* @param id
* bean的id
* @return
*/
public static Object getObject(String id) {
Object object = null;
object = applicationContext.getBean(id);
return object;
}
}
然后再spring容器中注入
<bean id="springUtil" class="com.qingguiyu.util.SpringUtil"/>
用的时候
SpringUtil.getObject("beanid");