【发布时间】:2015-11-06 16:26:06
【问题描述】:
谁能解释这两个 Spring bean 范围之间的区别? 我熟悉单例模式。
这是唯一的区别吗? 您可以使用应用程序范围在 Spring 容器中拥有一个 bean 列表。
另外,你能在一个 Spring 容器中运行多个 Web 服务器吗?如果是,那将是使用应用程序范围而不是单例范围的原因,否则 bean 将在两个服务器上共享。
【问题讨论】:
标签: spring
谁能解释这两个 Spring bean 范围之间的区别? 我熟悉单例模式。
这是唯一的区别吗? 您可以使用应用程序范围在 Spring 容器中拥有一个 bean 列表。
另外,你能在一个 Spring 容器中运行多个 Web 服务器吗?如果是,那将是使用应用程序范围而不是单例范围的原因,否则 bean 将在两个服务器上共享。
【问题讨论】:
标签: spring
The documentation 解释它:
这有点类似于 Spring 单例 bean,但在两个重要方面有所不同:它是每个 ServletContext 的单例,而不是每个 Spring 'ApplicationContext'(或者在任何给定的 Web 应用程序中可能有多个),它实际上是暴露并因此作为 ServletContext 属性可见
【讨论】:
在应用程序范围内,容器为每个 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.
【讨论】: