`
uule
  • 浏览: 6306651 次
  • 性别: Icon_minigender_1
  • 来自: 一片神奇的土地
社区版块
存档分类
最新评论

通过ApplicationContextAware获取bean

阅读更多

加载Spring配置文件时,如果Spring配置文件中所定义的Bean类实现了ApplicationContextAware 接口,那么在加载Spring配置文件时,会自动调用ApplicationContextAware 接口中的

public void setApplicationContext(ApplicationContext context) throws BeansException

方法,获得ApplicationContext 对象。

前提必须在Spring配置文件中指定该类。

 

public class SpringContextHolder implements ApplicationContextAware {

     /**
      * 以静态变量保存ApplicationContext,可在任意代码中取出ApplicaitonContext.
      */
	private static ApplicationContext context;

	/**
	 * 实现ApplicationContextAware接口的context注入函数, 将其存入静态变量.
	 */
	public void setApplicationContext(ApplicationContext context) {
		SpringContextHolder.context =context;
	}	
	public static ApplicationContext getApplicationContext() {
		return context;
	}
	/**
	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
	 */
	public static <T> T getBean(String name) {
		return (T) context.getBean(name);
	}
}

 bean中:

<bean id="springContextHolder" class="com.enation.framework.context.spring.SpringContextHolder" />

 

调用:

ICartManager cartManager = SpringContextHolder.getBean("cartManager");

 

正常情况:

 

public class AppManager extends ContextLoaderListener implements  ServletContextListener {

	private ServletContext context;
	private WebApplicationContext webApplicationContext;

	public void contextInitialized(ServletContextEvent sce) {
		this.context = sce.getServletContext();
		this.webApplicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
		this.context.setAttribute("WEBAPPLICATIONCONTEXT", webApplicationContext);

	}

 

HttpSession session = request.getSession();
WebApplicationContext webApplicationContext = (WebApplicationContext)session.getServletContext().getAttribute("WEBAPPLICATIONCONTEXT");
UnsubscribeEmailFacade unsubscribeEmailFacade = (UnsubscribeEmailFacade)webApplicationContext.getBean("unsubscribeEmailFacade");

 法2:

 

org.springframework.web.context.ContextLoader
// 获取spring bean容器
	WebApplicationContext wac = ContextLoader.getCurrentWebApplicationContext();
	ISysConfigDao sysconfigdao = (ISysConfigDao) wac.getBean("iSysConfigDao");

 

 

 

 

 

分享到:
评论
2 楼 uule 2010-12-03  
context 是空的?你bean里面注入了吗?
1 楼 yixibo 2010-12-02  
收到,问题 是我在使用SpringContextHolder.getBean("cartManager");  的时候,总是报空指针错误,因为context 是空的,但是在项目启动时,context这个已被 注入 了,不明白原因。不知道你有什么办法,谢谢!

相关推荐

Global site tag (gtag.js) - Google Analytics