Web应用程序上下文层次结构中的Spring bean作用域

时间:2013-01-28 11:28:15

标签: java spring applicationcontext

我在web.xml文件中配置了spring root web context。 我和这个父母也有几个子语境。所有子上下文都是手动创建的:

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

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

如何正确创建和配置子上下文以使它们能够处理Web应用程序范围?

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

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

1 个答案:

答案 0 :(得分:4)

你遇到的问题是

  

session-scope:将单个bean定义范围限定为HTTP会话的生命周期。仅在支持Web的Spring ApplicationContext 的上下文中有效。

您的ClassPathXmlApplicationContext不是网络感知

我建议您转到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是有用的资源: