2010-01-31 101 views

回答

24

是的,他们应该是范围singleton。 服务应该是无状态的,因此它们不需要多于一个实例。

因此,在范围singleton中定义它们将节省实例化和连接它们的时间。

singleton是Spring的默认范围,所以只需保留bean定义的原样,而不显式指定scope属性。

您可以阅读更多关于示波器in the spring docs

+0

谢谢。我是Spring新手,我知道如何编写单例类,但是如何使用Spring设置“单例范围”? – oym 2010-01-31 19:36:12

+0

哦,我没有看到你的评论关于它作为默认范围。你能向我解释一下这个范围是如何设置和配置的,以便我可以了解所有东西都是如何连接的?再次感谢。 – oym 2010-01-31 19:37:26

+0

我添加了链接到我的答案。 – Bozho 2010-01-31 19:40:10

2

如果你坚持使用singleton作用域的bean,Spring更容易使用。如果你喜欢,单身是它的“默认位置”。是的,它支持其他范围(在XML文件中使用scope="xyz"),但它使事情变得更难以使用,并损害性能。

基本上,除非你有一个很好的理由否则,坚持单身。

1

你大多需要单身。 (Spring默认值。)单例必须是线程安全的,因为并行请求将使用相同的单个实例。事实上,它们必须是完全无国籍的,因为它可以在任何时候被破坏和重新创建。

如果您需要跟踪bean内部的状态(不应该,这应该在数据库中或存储在请求中),您将获得相同类型bean的许多实例,内存使用量会增加与请求的数量,即单身人士,你仍然只有一个实例。

即使您将bean的范围限定为请求,它们仍然必须至少是线程安全的(请求来自同一浏览器)。

+0

春天的单身bean可以*不*创建和随时销毁,我不知道你从那里得到了什么(可能你把它们与EJB会话bean混淆了)。此外,Spring单例中的可变状态绝对没问题,你只需要知道在该共享状态下可以完成哪些操作。 – skaffman 2010-01-31 21:30:52