【问题标题】:Java Spring bean scopes: singleton vs applicationJava Spring bean范围:单例与应用程序
【发布时间】:2015-11-06 16:26:06
【问题描述】:

谁能解释这两个 Spring bean 范围之间的区别? 我熟悉单例模式。

这是唯一的区别吗? 您可以使用应用程序范围在 Spring 容器中拥有一个 bean 列表。

另外,你能在一个 Spring 容器中运行多个 Web 服务器吗?如果是,那将是使用应用程序范围而不是单例范围的原因,否则 bean 将在两个服务器上共享。

【问题讨论】:

    标签: spring


    【解决方案1】:

    The documentation 解释它:

    这有点类似于 Spring 单例 bean,但在两个重要方面有所不同:它是每个 ServletContext 的单例,而不是每个 Spring 'ApplicationContext'(或者在任何给定的 Web 应用程序中可能有多个),它实际上是暴露并因此作为 ServletContext 属性可见

    【讨论】:

    • 嘿 Nizet,我有点困惑。你能举一些例子,一个应用程序有多个 ServletContext。
    • 重读。 Web 应用程序只有一个 ServletContext。但它可以有多个 Spring 应用程序上下文(通常,每个 Spring 调度程序 servlet 一个根上下文和一个子 Web 上下文)
    • 多个spring应用程序上下文意味着,我们可以有多个spring配置文件,对..我们可以在多个文件中定义同一个bean对..范围为“应用程序”。是不是你想说的。请帮助我理解。谢谢
    【解决方案2】:

    在应用程序范围内,容器为每个 Web 应用程序运行时创建一个实例。 应用范围几乎类似于单例范围。所以,区别是

    Application scoped bean 是每个 ServletContext 的单例,但是 singleton scoped bean 是每个 ApplicationContext 的单例。这意味着单个应用程序可以有多个应用程序上下文。

    Singleton Scoped Bean

    //load the spring configuration file
    ClassPathXmlApplicationContext context =
            new ClassPathXmlApplicationContext("context.xml");
    
    // retrieve bean from spring container
    MyBean myBean = context.getBean("myBean", MyBean.class);
    MyBean myBean2 = context.getBean("myBean", MyBean.class);
    
    // myBean == myBean2 - output is true.
    

    【讨论】:

      猜你喜欢
      • 2012-03-27
      • 1970-01-01
      • 2014-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2013-02-15
      • 1970-01-01
      相关资源
      最近更新 更多