SpringMVC WebApplicationContext的创建方式

    本文说的通过DispatcherServlet生成WebApplicationContext,并不是说在web.xml不配置ContextLoaderListener,而是指通过DispatcherServlet去加载声明Bean的spring配置文件。如果在web.xml不配置ContextLoaderListener,那么下面这行代码获取到的WebApplicationContext将是null。

WebApplicationContextUtils.getWebApplicationContext(sc);


    至于两者生成WebApplicationContext区别与关系,可参考:http://www.iteye.com/topic/1125421基于自己碰到的情况,本文说一种常见的情况,

即:如果只通过DispatcherServlet生成了WebApplicationContext,而没有通过ContextLoaderListener生成WebApplicationContext,那么,在Filter中获取WebApplicationContext,然后通过上下文获取Bean的时候,结果是:Bean是获取不到的。如下面的代码:

  1. public class JavaScriptLocalizeFilter implements Filter {
    	private JavaScriptLocalizeBean jsLocalizeBean;
    
    	@Override
    	public void init(FilterConfig config) throws ServletException {
    		ServletContext sc = config.getServletContext();
    		WebApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(sc);
    		//下面的代码 是获取不到bean的
    		jsLocalizeBean = context.getBean(JavaScriptLocalizeBean.class);
    	}
    
    	@Override
    	public void doFilter(ServletRequest request, ServletResponse response,
    			FilterChain chain) throws IOException, ServletException {
    		
    	}
    
    	@Override
    	public void destroy() {
    
    	}
    }
  2. 发生上述情况的原因:DispatcherServlet(本质上还是一个普通的Servlet)通过init方法来创建自己专属的WebAppliactionContext,但是Servlet的初始化时间是晚于Filter的,所以在Filter是获取不到Bean的。详细可参考:http://hi.baidu.com/630270730/item/2b55a0d5cddba692260ae782


转载于:https://my.oschina.net/zero2hero/blog/297943

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值