当前位置: 首页 > 知识库问答 >
问题:

web应用程序上下文层次结构中的Spring bean范围

霍建柏
2023-03-14

我在web中配置了spring根web上下文。xml文件。我也有几个与此父项相关的子上下文。所有子上下文都是手动创建的:

 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"ApplicationContext/beans.xml"}, rootApplicationContext);

我想在这个子上下文中管理会话和请求范围的bean。

如何正确创建和配置子上下文,使其能够处理web应用程序范围?

现在我在尝试自动装配会话范围的bean时出现以下错误(显然):

java.lang.IllegalStateException: No Scope registered for scope 'session'

共有1个答案

孙化
2023-03-14

你的问题是

会话范围 :将单个 Bean 定义的作用域限定为 HTTP 会话的生命周期。仅在 Web 感知的 Spring ApplicationContext 的上下文中有效。

而且你的ClassPathXmlApplicationContext不是Web感知的。

我建议你去 GenericWebApplicationContext 而不是 ClassPathXmlApplicationContext

你可以试着这样做:

GenericWebApplicationContext context = new GenericWebApplicationContext(servletContext);
context.setParent(rootApplicationContext);
XmlBeanDefinitionReader xmlReader = new XmlBeanDefinitionReader(context);
xmlReader.loadBeanDefinitions(new ClassPathResource("ApplicationContext/beans.xml"));
context.refresh();

Spring javadoc是有用的来源:

  • 通用应用上下文
 类似资料:
  • 说当Spring上下文层次结构关闭时,没有保证豆子将被销毁的顺序是正确的吗?例如,子上下文中的豆子将在父上下文中销毁。从一个最小的例子来看,上下文的破坏似乎在上下文之间是完全不协调的(奇怪的是)。这两个上下文都注册一个 shutdown hook,稍后将在不同的线程中执行。 给出输出: 有没有办法强制以“正确”的顺序关闭上下文?

  • 我是Spring的新手,如果我做了一些愚蠢的事情,请原谅我。我正在尝试为我的应用程序编写一个使用Spring的集成测试。 我正在创建一个上下文层次结构,如下所示 在我的测试方法中,我试图创建一个新的子上下文,它只有一个bean,它是一个应用程序侦听器,依赖于父方法中的bean。 我面临的问题是,来自子上下文的bean没有收到应用程序事件的通知,而且@Value注释也没有得到处理。 我到底做错了什么

  • Tornado web 应用程序通常包含一个或多个 子类, 一个 对象来为每个控制器路由到达的请求, 和一个 main() 方法来启动服务器. 一个小型的 “hello world” 示例看起来是这样的: import tornado.ioloop import tornado.web class MainHandler(tornado.web.RequestHandler): def

  • 我正在开发一个Spring MVC REST API。一切正常,这很好,但我从日志中注意到,每次重新启动应用程序时,applicationContext都会加载两次:一次是tomcat加载war文件,第二次是客户端第一次访问web应用程序。 我将举几个例子: 就在我启动雄猫之后: ... 然后此刻我执行第一个API调用: 这肯定不是正常行为吧?我的web.xml是这样的: http://java.

  • 我正在尝试找到一种方法来显式指定部署到Glassfish的Web应用程序的上下文路径3.1.2.2但到目前为止我还没有运气。有人能对此提供指导吗?背景如下: 我有一个Web应用程序,它由两个单独的Netbean(7.0)项目组成。第一个是Web服务,称为FOWS。第二个是使用FOWS网络服务的面向用户的Web应用程序。它被称为FooApp。 我最近将glassfish升级到3.1.2.2,希望解决

  • 问题内容: 我已遵循Go网站上的“ 编写Web应用程序”教程,并且开始编写自己的Web应用程序。我还阅读了《如何编写Go代码》的开始,并尝试使用相同的工作区结构来组织我的代码。 我正在编写一个名为mygosite的简单Web应用程序,该应用程序通过呈现单个模板来处理所有请求。运行之后,我的目录结构现在看起来像这样: 在我的代码中,我指的是带有path的模板。运行时,应用程序找不到源模板,因为它位于