【问题标题】:Spring bean scopes in web application context hierarhyWeb 应用程序上下文层次结构中的 Spring bean 范围
【发布时间】:2013-01-28 11:28:15
【问题描述】:

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

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

我想在这个子上下文中管理会话和请求作用域 bean。

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

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

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

【问题讨论】:

    标签: java spring applicationcontext


    【解决方案1】:

    你的问题是

    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 有用的源码:

    【讨论】:

    • context.setParent(rootApplicationContext) - 我错过了那行)
    • 当我这样做时,我得到一个Cannot resolve ServletContextResource without ServletContext。这可以通过将 servlet 上下文从根应用程序上下文传递到新的应用程序上下文来解决(为此目的,我当前的 bean 是 ApplicationContextAware)。
    猜你喜欢
    • 1970-01-01
    • 2016-06-18
    • 2012-12-21
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2011-07-15
    • 2011-03-12
    相关资源
    最近更新 更多