无法访问Spring"应用程序" Scope Bean作为ServletContext的属性

时间:2014-08-15 08:12:44

标签: spring-mvc

在Spring文档中,有关于“application”范围的声明。

申请范围

考虑以下bean定义:

Spring容器通过对整个Web应用程序使用appPreferences bean定义一次来创建AppPreferences bean的新实例。也就是说,appPreferences bean的作用域是ServletContext级别,存储为常规的ServletContext属性。这有点类似于Spring单例bean,但在两个重要方面有所不同:它是每个ServletContext的单例,而不是每个Spring ApplicationContext(或者在任何给定的Web应用程序中可能有几个),而它实际上是暴露的,因此可以看作是ServletContext属性。

正如我测试的那样,这是不正确的。

以下是测试代码:

<bean id="applicationA" class="demo.A"  scope="application"/>
@RequestMapping("/testApplicationScope")
@ResponseBody
public String testRequestScope(HttpServletRequest request) {
    ServletContext ctx = request.getServletContext();
    System.out.println(ctx.getAttribute("applicationA"));

    // even try to traverse all ServletContext's attributes, but nothing found
    for (Enumeration<String> e = ctx.getAttributeNames(); e.hasMoreElements();) {
        Object obj = ctx.getAttribute(e.nextElement());
        if (obj instanceof A) {
            A a = (A) obj;
            System.out.println(a);
        }
    }

    return "Tested";
}
你可以尝试测试一下吗?有点混乱。

0 个答案:

没有答案