2017-05-24 70 views
1

在我们的系统中,我们经常收到一次用户请求的数量。所以我们正在创建原型bean并开始处理请求。 在这些原型bean中,我们当然会使用其他一些bean。在原型bean中使用Spring单例bean。会发生什么?

所以我的问题:是明智的,可以在原型bean中使用singleton-beans?如果是的话,正确使用的条件是什么?

我会认为,如果我只让一个singleton服务被大量的prototype bean使用,它是有效的。 但是当几个bean在同一时间要求一个单独bean时会发生什么

+0

谢谢。另外我在文档中发现prototype-beans是昂贵的资源,所以只有在它们处于某种状态时才应该使用它们。 –

+0

还有一个问题。如果几个bean同时请求一个单身bean,那么是否有任何队列或所有这些进程将会并行? –

+0

评论有点冗长。我将它们添加为答案。 – dpr

回答

1

在原型bean中使用单例bean是明智的吗?

这很大程度上取决于你的豆的样子。如果将数据存储在单例bean的字段中,则必须考虑同步。如果你的bean是完全无状态的(例如通过使用数据库作为持久性),你不需要担心在整个地方使用一个bean的单个实例。

然而,另一种方式(使用原型豆单身)可能是非常危险的。由于JVM中只有一个单例实例,因此这个单例将为每个调用者保持对同一个原型实例的引用。使其状态稳定并受到同步问题的影响。

当几个bean一次会要求一个单身bean时会发生什么?

一个实例化的Java类非常多,只是内存中某处的数据和指令的集合,这个类的变量持有引用在哪里查找东西。如果要执行一个类的功能,处理器会查找内存中的内容。如果对同一个类有多个引用,这意味着多次引用同一个内存地址。 JVM管理内存访问并保证符合Java Memory Model。这是您应该注意的事情,但通常对您的日常业务并不重要 - 除非您实施JVM当然:-)

相关问题