2009-10-14 56 views
1

我一直在使用Spring一段时间,但我真的不知道如何当我要求Spring在多个不同的服务类中注入DAO时,它总是相同的类,或者如果我要求原型是每隔一个新类时间等等会话范围等等。任何人都可以分享一些关于这种特别是“单身人士”的灯光,因为它是最常用的,也可以用于可能包含状态但是是单身服务的服务层类别的线程安全问题Spring如何保持单件,原型......在引擎盖下?

回答

3

我并不是想成为一名“LMGTFY”笨蛋,但我怀疑有人会比Spring documentation on bean scopes更好地解释它。当它的加载

  1. 辛格尔顿豆(这是默认的范围)均在正常预实例化(除非另有配置)通过bean工厂:

    作为一个快速的翻版,不过,以解决您的具体问题。可以把它看作是豆的地图。当你要求一个bean(直接或作为其他bean的依赖或自动装配时),它是从该映射获得的。

  2. 原型bean没有预先实例化;每次你要求一个原型bean时,Spring都会创建并初始化一个新实例。
  3. 就多线程而言,Dean J(谁删除了他的答案)是正确的 - 你的服务不应该保持一个状态,或者如果他们这样做,应该适当地同步。
+0

LMAO !!你知道我以前从来没有见过这个,我已经多次阅读这个文档,但只是寻找我想要的...应该保持原来的模式,但后来SO想到了大声笑...... SO替代原则! – 2009-10-14 18:13:43

+0

@ ChssPly76:其实这已经告诉我我所知道的,我更像是寻找内部的东西,是否有'Threadlocal'的使用,'Map'与bean ID在哪里/如何维护等 – 2009-10-17 21:53:25

+0

没有ThreadLocal,也没有同步,一切都包含在BeanFactory实例中。对于Spring MVC,您可以选择让Spring在会话中同步控制器的方法,但这就是它。您可以查看(http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/beans/factory/support/AbstractBeanFactory.html)AbstractBeanFactory源代码(及其子类,如DefaultListableBeanFactory )如果你对内部工作方式感兴趣。 – ChssPly76 2009-10-17 22:05:27

相关问题