Java Spring Bean作用域:单例模式 vs 应用程序模式

11

请问有人能解释一下这两个Spring bean作用域之间的区别吗?我熟悉单例模式。

这是唯一的区别吗?使用应用程序作用域可以在Spring容器中拥有一系列的bean。

此外,您能否在一个Spring容器中运行多个Web服务器?如果可以,那么使用应用程序作用域而不是单例作用域将是一个理由,因为否则bean将在两个服务器之间共享。

2个回答

8

文档解释如下:

这与Spring单例bean有些相似,但有两个重要的区别:它是每个ServletContext的单例,而不是每个Spring 'ApplicationContext'的单例(在任何给定的Web应用程序中可能有多个),并且它实际上被公开,因此作为ServletContext属性可见


1
嘿,Nizet,我有点困惑。你能给一个例子吗,其中一个应用程序有多个ServletContext。 - ParagFlume
2
请重新阅读。一个Web应用程序只有一个ServletContext。但是它可以有多个Spring应用程序上下文(通常,每个Spring调度程序servlet有一个根上下文和一个子Web上下文)。 - JB Nizet
1
多个Spring应用程序上下文意味着我们可以有多个Spring配置文件,对吧?而且我们可以在多个文件中定义相同的bean,对吧?作用域为“application”。这是您想要表达的吗?请帮我理解。谢谢。 - ParagFlume

3
在应用程序范围内,容器会为每个Web应用程序运行时创建一个实例。 应用程序作用域与单例作用域几乎相似。 因此,它们之间的区别是:
具有应用程序作用域的bean是每个ServletContext的单例,而具有单例作用域的bean是每个ApplicationContext的单例。 这意味着对于单个应用程序可能会有多个应用程序上下文。
单例作用域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.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接